文字列を比較するときに大文字と小文字を区別しないようにSqlite3を設定するにはどうすればよいですか?

文字列照合でsqlite3データベースからレコードを選択したい。しかし、where句で「=」を使用すると、sqlite3では大文字と小文字が区別されることがわかりました。大文字と小文字を区別しない文字列比較の使用方法を教えてもらえますか?

cheduardo

あなたは使用することができCOLLATE NOCASE、あなたの中SELECTのクエリ:

SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE

さらに、SQLiteではcollate nocase、列定義で指定することにより、テーブルを作成するときに列で大文字と小文字を区別しないように指定できます(他のオプションはbinary(デフォルト)とrtrim;ここを参照)。collate nocaseインデックスを作成するタイミングも指定できます例えば:

テーブルテストを作成します
  Text_Value text collat​​e 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               

オプティマイザーは、大文字と小文字を区別しない検索と列の照合にインデックスを利用できる可能性もあります。これは、explainSQLコマンドを使用して確認できます。例:

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 +111012                                
コールバック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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ