微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LIKE 运算符两列 clickhouse

如何解决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 在分离到行之前应用编译表达式并应用到列字节流)。

在某些情况下,您可以为此任务使用 positioncountSubstrings 函数。

,

您可以为此使用 LOCATEPOSITION (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 举报,一经查实,本站将立刻删除。