我正在使用 PHP 和后端 ClickHouse 数据库开发站点。当我使用 like 查询时,它不支持区分大小写的单词。
select id,comments from discussion where comments LIKE "%Data not reflect%";
Run Code Online (Sandbox Code Playgroud)
有没有办法搜索不区分大小写的单词?
vla*_*mir 12
从版本 20.6.3.28开始,CH 中添加了不区分大小写的ILIKE运算符:
\nSELECT *\nFROM\n(\n SELECT \'** Data not reflect **\' AS text\n UNION ALL\n SELECT \'** data not reflect **\'\n)\nWHERE text ILIKE \'%Data not reflect%\'\n\n/*\n\xe2\x94\x8c\xe2\x94\x80text\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 ** Data not reflect ** \xe2\x94\x82\n\xe2\x94\x82 ** data not reflect ** \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n*/\nRun Code Online (Sandbox Code Playgroud)\n
没有ILIKE运营商。我认为你可以使用lowerUTF8().
select id,comments from discussion where lowerUTF8(comments) LIKE '%Data not reflect%';
Run Code Online (Sandbox Code Playgroud)
但是,可能会影响性能,因为它必须将所有comments值转换为小写。
使用positionCaseInsensitive或positionCaseInsensitiveUTF8
就这样
SELECT id,comments
FROM discussion
WHERE positionCaseInsensitive(comments,'Data not reflect')>0;
Run Code Online (Sandbox Code Playgroud)
对于更复杂的模式,您可以使用带有i标志的正则表达式:
SELECT ... WHERE match(comment, '(?i)Data.*not reflect');
Run Code Online (Sandbox Code Playgroud)