5

SELECT ... LIKE大文字と小文字を区別するSQLiteでクエリを実行したいと思います。ただし、この1つのクエリでは大文字と小文字が区別されるだけで、他には何もありません。

私はあることを知っています

PRAGMA case_sensitive_like = boolean;

しかし、それはすべてのLIKEクエリを変更するようです。

単一のクエリで大文字と小文字を区別するLIKEを有効にするにはどうすればよいですか?

例:「FuN」のクエリを「blahFuN blah」と一致させたいが、「foofunbar」とは一致させたくない。

(これはPDOを使用してPHPで実行されています)

オンに切り替えて、クエリの後でオフに切り替えることができるかもしれませんが、影響(効率など)が懸念される場合があります。害はありますか?

データベースへの書き込みアクセス権がありません。

(これはWindows Server 2008の下にあります)

私も試しましたが、大文字と小文字を区別するSELECTは実行されませんでした。それでも、ラップトップSELECT id, summary, status FROM Tickets WHERE summary COLLATE BINARY LIKE '%OPS%';のように結果が返されます。

4

6 に答える 6

7

シンプルな使い方をしてみませんか

PRAGMA case_sensitive_like = true/false;

各クエリの前後で大文字と小文字を区別しますか? ただし、大文字と小文字の区別は ASCII 文字でのみ機能し、Unicode では機能しないため、現時点では SQlite が完全に UC に準拠していないことに注意してください。

あるいは、SQlite を使用すると、アプリケーションは www.sqlite.org/lang_expr.html に従って役立つ可能性のある REGEXP 演算子を実装できます

于 2012-05-22T10:57:44.420 に答える
2

試す:

 SELECT id, summary, status FROM Tickets WHERE summary GLOB \"*OPS*\";

*と の間にスペースはありませんOPS

于 2012-05-23T21:15:17.417 に答える
1

大文字と小文字を区別するデータと一致するかどうかを確認するために、返された値の php コードで個別のチェックを行う必要があると思います。

$rs = mysql_query("Select * from tbl where myfield like '%$Value%'");


while($row == mysql_fetch_assoc($rs))
{

     if (strpos($row['myfield'],$Value) !== false)
     {
        $Matches[] = $row;
      }


 }

 print_R($Matches);
于 2012-05-20T11:02:45.833 に答える
0

次のようなことを試すことができます:

SELECT YOUR_COLUMN FROM YOUR_TABLE WHERE YOUR_COLUMN COLLATE latin1_general_cs LIKE '%YOUR_VALUE%'

列にある照合セットが不明です。例としてラテン語を選びました。クエリを実行し、末尾の「cs」を「ci」に変更します。異なる結果が表示されるはずです。

アップデート

ごめん。質問を読むのが速すぎる。上記の照合は mysql 用です。SQLLite の場合、大文字と小文字を区別して検索できる BINARY を使用できるはずです。

参照: http://www.sqlite.org/datatype3.html#collat​​ion

于 2012-05-21T18:11:48.630 に答える
-1

これは、クエリごとではなく、列ごとに実行できます(これはあなたの場合かもしれません)。これには、sqlite照合を使用します。

CREATE TABLE user (name VARCHAR(255) COLLATE NOCASE);

この列に対するすべてのLIKE操作では、大文字と小文字は区別されません。

COLLATE列が特定の照合で宣言されていない場合でも、クエリを実行できます。

SELECT * FROM list WHERE name LIKE '%php%' COLLATE NOCASE

照合では、ASCII文字のみが大文字と小文字を区別しないことに注意してください。"A" == "a"、しかし "Æ"!="æ"

SQLiteを使用すると、で新しい照合タイプを宣言できsqlite_create_collation、PHP側で照合ロジックを実装しますが、PDOはこれを公開しません。

于 2012-05-17T18:40:53.677 に答える
-2
SELECT * FROM table WHERe field LIKE '%search_term%'

この形式では、SELECT は大文字と小文字を区別しません。

于 2013-10-13T08:27:35.990 に答える