SQL 同时使用 LIKE 和 ANY

SQL Using LIKE and ANY at the same time

我有一个 table,其中有一个类型为 text 的列 feature 和一个名为 args 的文本数组 (text[])。我需要 select 从 table 那些行中 feature 列至少包含 的一个元素args数组。

我尝试了不同的选择,包括:

SELECT * FROM myTable WHERE feature LIKE '%' + ANY (args) + '%';

但这不起作用。

简单的解决方案是改用正则表达式匹配运算符 ~,它按原样处理 arg 中的字符串(不连接通配符):

SELECT *
FROM   tbl
WHERE  feature ~ ANY(args);

string ~ 'pattern' 大部分等同于 string LIKE '%pattern%',但 不完全等同于 ,因为 LIKE 使用与 [ 不同(且更少)的特殊字符=12=]。参见:

  • Escape function for regular expression or LIKE patterns

如果不能接受这种细微差别,这里是您所要求的精确实现:

SELECT *
FROM   tbl t
WHERE  t.feature LIKE ANY (SELECT '%' || a || '%' FROM unnest(t.args) a);

解除数组嵌套,用通配符填充每个元素,然后将 LIKE ANY 与结果集一起使用。

参见:

  • IN vs ANY operator in PostgreSQL