我想通过字符串匹配从sqlite3数据库中选择记录。但是,如果我在where子句中使用'=',我发现sqlite3区分大小写。谁能告诉我如何使用不区分大小写的字符串比较?
您可以COLLATE NOCASE
在SELECT
查询中使用:
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
另外,在SQLite中,您可以通过collate nocase
在列定义中指定(其他选项为binary
(默认)和rtrim
;参见此处)来指示创建表时该列不区分大小写。您还可以指定collate nocase
何时创建索引。例如:
创建表Test ( Text_Value文本整理nocase ); 插入测试值(“ A”); 插入测试值(“ b”); 插入测试值(“ C”); 在测试上 创建索引Test_Text_Value_Index (Text_Value整理无大小写);
Test.Text_Value
现在,涉及的表达式应该不区分大小写。例如:
sqlite>从Test中选择Text_Value,其中Text_Value ='B'; Text_Value ---------------- b sqlite>从Test order中按Text_Value选择Text_Value; Text_Value ---------------- A b C sqlite>通过Text_Value desc从测试顺序中选择Text_Value; TEXT_VALUE ---------------- Ç b 甲
优化程序还可以潜在地利用索引来区分大小写,并在列上进行匹配。您可以使用explain
SQL命令进行检查,例如:
sqlite>解释一下,从Test中选择Text_Value,其中Text_Value ='b'; addr操作码p1 p2 p3 ---------------- -------------- ---------- ----- ----- --------------------------------- 0转到0 16 1整数0 0 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列1 0 12回调1 0 13下一个1 9 14关闭1 0 15暂停0 0 16事务0 0 17 VerifyCookie 0 4 18转到0 1 19 Noop 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句