【问题标题】:How to use like operator in Presto with string that contain a dot?如何在 Presto 中对包含点的字符串使用 like 运算符?
【发布时间】:2021-01-06 05:46:19
【问题描述】:

我有一个这样的列字符串

“test.123.test” “某事”

我想运行一个查询来查找像“test.*.test”这样的字符串。在 postgresql 中我使用这个查询:

select * from table where string_column like 'test.%.test'

我在 presto 中运行了这个查询,但什么也没得到!它应该与我的字符串中的点有关,因为当我用类似“test.1%1.test”之类的东西替换字符串时,它可以工作,但这不是我的结果。

【问题讨论】:

  • 我知道我可以使用 regexp_like("string_column", 'test..*.test'),但是 like 运算符不起作用。
  • 这是 PostgreSQL 连接器的错误。请看github.com/prestosql/presto/issues/3645
  • 您是针对 presto 还是针对通过 presto 针对 postgres 运行查询?

标签: presto trino


【解决方案1】:

对于 Presto 查询

string_column like 'test.%.test'

下推到 PostgreSQL 连接器的谓词类似于:

string_column BETWEEN 'test.' AND 'test/'

但是,字符串比较需要整理,并且尾随标点符号会遇到 Presto/PostgreSQL 不兼容的边缘情况:https://github.com/trinodb/trino/issues/3645

您可以通过防止谓词下推到连接器中来解决方法此问题。您可以通过在查询中添加OR rand() = 42 来实现这一点:

string_column like 'test.%.test' OR rand() = 42

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 2020-07-15
    • 2021-12-11
    • 2011-04-27
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多