如何在 Clickhouse 数据库上搜索不区分大小写的查询字符串?

sel*_*van 6 sql clickhouse

我正在使用 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运算符:

\n
SELECT *\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*/\n
Run Code Online (Sandbox Code Playgroud)\n


sim*_*Pod 8

没有ILIKE运营商。我认为你可以使用lowerUTF8().

select id,comments from discussion where lowerUTF8(comments) LIKE '%Data not reflect%';
Run Code Online (Sandbox Code Playgroud)

但是,可能会影响性能,因为它必须将所有comments值转换为小写。


fil*_*nov 5

使用positionCaseInsensitivepositionCaseInsensitiveUTF8

就这样

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)

请参阅文档:https://clickhouse.yandex/docs/en/query_language/functions/string_search_functions/#position-haystack-needle-locate-haystack-needle