qua*_*ity 282 sqlite case-insensitive
我想通过字符串匹配从sqlite3数据库中选择记录.但是如果我在where子句中使用'=',我发现sqlite3区分大小写.任何人都可以告诉我如何使用字符串比较不区分大小写?
che*_*rdo 466
您可以COLLATE NOCASE在SELECT查询中使用:
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
Run Code Online (Sandbox Code Playgroud)
另外,在SQLite中,您可以通过collate nocase在列定义中指定(其他选项是binary(默认值)和rtrim;请参阅此处)来指示在创建表时列应该不区分大小写.您也可以指定collate nocase何时创建索引.例如:
create table Test
(
Text_Value text collate nocase
);
insert into Test values ('A');
insert into Test values ('b');
insert into Test values ('C');
create index Test_Text_Value_Index
on Test (Text_Value collate nocase);
涉及的表达式Test.Text_Value现在应该不区分大小写.例如:
sqlite> select Text_Value from Test where Text_Value = 'B'; Text_Value ---------------- b sqlite> select Text_Value from Test order by Text_Value; Text_Value ---------------- A b C sqlite> select Text_Value from Test order by Text_Value desc; 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 16 1 Integer 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 Column 1 0 12 Callback 1 0 13 Next 1 9 14 Close 1 0 15 Halt 0 0 16 Transaction 0 0 17 VerifyCookie 0 4 18 Goto 0 1 19 Noop 0 0
Cra*_*raz 145
SELECT * FROM ... WHERE name = 'someone' COLLATE NOCASE
Run Code Online (Sandbox Code Playgroud)
Nic*_*kis 45
你可以这样做:
SELECT * FROM ... WHERE name LIKE 'someone'
Run Code Online (Sandbox Code Playgroud)
(这不是在解决办法,但在某些情况下是非常方便)
" LIKE运算符进行模式匹配比较.右边的操作数包含模式,左边的操作数包含与模式匹配的字符串.模式中的百分比符号("%")匹配零或更多的任何序列字符串中的字符.模式中的下划线("_")匹配字符串中的任何单个字符.任何其他字符匹配 自身或其大小写 等效(即不区分大小写的 匹配).(一个错误:SQLite只能理解ASCII字符的大写/小写.LELE运算符对超出ASCII范围的unicode字符区分大小写.例如,表达式'a'LIKE'A'为TRUE,但'æ'LIKE'Æ'为FALSE.) ".
osc*_*kuo 40
这不是sqlite特有的,但你可以这样做
SELECT * FROM ... WHERE UPPER(name) = UPPER('someone')
Run Code Online (Sandbox Code Playgroud)
小智 6
另一种选择是创建您自己的自定义排序规则。然后,您可以在列上设置该排序规则或将其添加到您的选择子句中。它将用于排序和比较。
\n\n这可以用来使“VOILA”像“voil\xc3\xa0\”一样。
\n\nhttp://www.sqlite.org/capi3ref.html#sqlite3_create_collation
\n\n\n\n如果第一个字符串小于、等于或大于第二个字符串,则整理函数必须分别返回负整数、零整数或正整数。
\n