首页 > 解决方案 > postgres && - 带有通配符的数组重叠运算符

问题描述

在 postgres

select array['some', 'word'] && array ['some','xxx']   -- return true
select array['some', 'word'] && array ['','word']   -- return true

我想知道如何将 % 通配符与 && 运算符结合使用。

select array['some%', 'word'] && array ['','some']  -- I was thinking this will return true but it doesn't.

我想检查一个文本数组是否至少包含另一个文本数组的一个元素。第一个文本数组可以包含通配符。最好的方法是什么?

标签: sqlarrayspostgresqlwildcard

解决方案


您可以尝试unnest解析两个数组的每个元素并使用LIKEor比较它们ILIKE

SELECT EXISTS(
  SELECT  
  FROM unnest(array['some%', 'word']) i (txt),
       unnest(array ['','some']) j (txt)
  WHERE j.txt LIKE i.txt) AS overlaps;

 overlaps 
----------
 t
(1 row)

如果要将 应用于%所有数组元素,只需将其直接放在or运算符的WHERE子句中即可:LIKEILIKE

SELECT EXISTS(
  SELECT  
  FROM unnest(array['some', 'word']) i (txt),
       unnest(array ['','XXsomeXX']) j (txt)
  WHERE j.txt LIKE '%'||i.txt||'%') AS overlaps;

 overlaps 
----------
 t
(1 row)

演示:db<>fiddle


推荐阅读