Sqlite - LIKE不区分大小写,不是英文字母

Leo*_*nov 7 sql sqlite sql-like

对不起我的英语不好.

我想检索其TITLE字段满足某些模式的行(不区分大小写),并且此字段仅包含非英文字母.

我试过这个:

SEARCH * FROM TABLE_NAME WHERE UPPER(column_name) LIKE UPPER('%pattern%');

但是,它不起作用,可能是因为表中只包含非英文字母.

更新:

例:

SELECT * FROM PartnersTable WHERE UPPER(TitleColumn) LIKE UPPER('%pattern%') ;
Run Code Online (Sandbox Code Playgroud)

哪里:

TitleColumn可能包含"Газпром","Лукойл","Йотафон","Мечтаювелира",

pattern可能包含"газ","Ювелир"等.

Mic*_*rek 4

我尝试使用 COLLATE NOCASE添加到列定义中。如果你能做到,那么这就是你要走的路。

\n

我测试的:

\n
CREATE TABLE PartnersTable \n    (`id` , `TitleColumn` COLLATE NOCASE )\n;\n
Run Code Online (Sandbox Code Playgroud)\n

添加了与您的问题相同的数据:

\n
INSERT INTO PartnersTable\n    (`id`, `TitleColumn`)\nVALUES\n (1, \'\xd0\x93\xd0\xb0\xd0\xb7\xd0\xbf\xd1\x80\xd0\xbe\xd0\xbc\'), (2, \'\xd0\x9b\xd1\x83\xd0\xba\xd0\xbe\xd0\xb9\xd0\xbb\'), (3, \'\xd0\x99\xd0\xbe\xd1\x82\xd0\xb0\xd1\x84\xd0\xbe\xd0\xbd\'), (4, \'\xd0\x9c\xd0\xb5\xd1\x87\xd1\x82\xd0\xb0 \xd1\x8e\xd0\xb2\xd0\xb5\xd0\xbb\xd0\xb8\xd1\x80\xd0\xb0\')\n;\n
Run Code Online (Sandbox Code Playgroud)\n

然后尝试选择它:

\n
select *\nfrom PartnersTable\nwhere TitleColumn like \'%\xd0\xae\xd0\xb2\xd0\xb5\xd0\xbb\xd0\xb8\xd1\x80%\'\n
Run Code Online (Sandbox Code Playgroud)\n

有用。

\n

此处演示:\n http://sqlfiddle.com/#!7/ae8f8/2

\n

编辑:\n您也可以在不使用UPPER. 默认情况下LIKE不区分大小写。\n根据文档:

\n
\n

任何其他字符与其自身或其小写/大写等效字符匹配(即不区分大小写的匹配)。(一个错误:SQLite 只理解 ASCII 字符的大写/小写。对于超出 ASCII 范围的 unicode 字符,LIKE 运算符区分大小写。例如,表达式 \'a\' LIKE \'A\' 为 TRUE,但\'\xc3\xa6\' 像 \'\xc3\x86\' 是假的。)。

\n
\n

此处演示:\n http://sqlfiddle.com/#!7/c9b5d/1

\n

  • COLLATE NOCASE 仅适用于 ASCII 字符 (2认同)