文字列照合でsqlite3データベースからレコードを選択したい。しかし、where句で「=」を使用すると、sqlite3では大文字と小文字が区別されることがわかりました。大文字と小文字を区別しない文字列比較の使用方法を教えてもらえますか?
あなたは使用することができCOLLATE NOCASE
、あなたの中SELECT
のクエリ:
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
さらに、SQLiteではcollate nocase
、列定義で指定することにより、テーブルを作成するときに列で大文字と小文字を区別しないように指定できます(他のオプションはbinary
(デフォルト)とrtrim
;ここを参照)。collate nocase
インデックスを作成するタイミングも指定できます。例えば:
テーブルテストを作成します ( Text_Value text collate nocase ); テスト値( 'A')に挿入します。 テスト値に挿入します( 'b'); テスト値( 'C')に挿入します。 テストで インデックスTest_Text_Value_Indexを作成します(Text_Valueはnocaseを照合します);
を含む式でTest.Text_Value
は、大文字と小文字を区別しないようにする必要があります。例えば:
sqlite>テストからText_Valueを選択します。ここでText_Value = 'B'; Text_Value ---------------- b sqlite> Text_Valueによるテスト順序からText_Valueを選択します。 Text_Value ---------------- A b C sqlite> Text_Valuedescによるテスト順序からText_Valueを選択します。 Text_Value ---------------- C b A
オプティマイザーは、大文字と小文字を区別しない検索と列の照合にインデックスを利用できる可能性もあります。これは、explain
SQLコマンドを使用して確認できます。例:
sqlite> Explain select Text_Value from Test where Text_Value = 'b'; addr opcode p1 p2 p3 ---------------- -------------- ---------- ----- ----- --------------------------------- 0 Goto 0 161 整数00 2 OpenRead 1 3 keyinfo(1、NOCASE) 3 SetNumColumns 1 2 4 String8 0 0 b 5 IsNull -1 14 6 MakeRecord 1 0 a 7 MemStore 0 0 8 MoveGe 1 14 9 MemLoad 0 0 10 IdxGE 1 14 +11 列 1012 コールバック10 13 Next 1 9 14 Close 1 0 15停止0 0 16取引0 0 17 VerifyCookie 0 4 18後藤0 1 19 NOOP 0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加