如何解决LIKE 运算符两列 clickhouse
我想在 clickhouse 表中选择两个字符串列彼此相似的行 (foe example where column1 is 'Hello' and column2 is '%llo'
)
我尝试过 LIKE 运算符:
SELECT * FROM table_name WHERE column1 LIKE column2;
但它说:
Received exception from server (version 21.2.8):
Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Argument at index 1 for function like must be constant: while executing 'FUNCTION like(column1 : 17,column2 : 17) -> like(column1,column2) UInt8 : 28'.
似乎第二个参数应该是一个常量值。有没有其他方法可以应用这个条件?
解决方法
CH Like 仅支持常量参数。 没有通用的解决方案。正则表达式函数等也有同样的问题。 (因为 Clickhouse 在分离到行之前应用编译表达式并应用到列字节流)。
在某些情况下,您可以为此任务使用 position
或 countSubstrings
函数。
您可以为此使用 LOCATE
或 POSITION
(https://clickhouse.tech/docs/en/sql-reference/functions/string-search-functions/)。查询看起来像这样:
SELECT *
FROM table_name
WHERE position(column1,column2,character_length(column1) - character_length(column2) + 1) > 0;
这可能是有缺陷的。似乎在 clickhouse 中,大多数字符串函数处理字节或可变 UTF8 字节长度而不是字符。人们必须注意这些功能如何工作以及它们应该如何组合。我正在使用上面的第三个参数 start_pos
并假设它指的是字符位置,但它也可以是字节 - 我无法在文档中找到此信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。