首页 > 解决方案 > Postgresql 使用 like 选择数组重叠的位置

问题描述

是否可以使用该子句确定ARRAY列是否包含来自另一个数组的重叠值?LIKE

运算符有效,&&但字符串必须完全匹配

 q = """select * from articles where keywords && '{"mortgage brokers"}';""" // Exact match

是否可以过滤行包含值而substring不是完整字符串的关键字?就像是:

 q = """select * from articles where keywords && LIKE '{"mortgage"}';""" // HOW TO FILTER keywords containing value with substring

标签: sqlpostgresqlsqlalchemy

解决方案


LIKE对字符串进行操作。要检查两个数组是否重叠,您可以使用&&.

数组函数和运算符文档

&&: 重叠(有共同的元素)

SELECT ARRAY[1,4,3] && ARRAY[2,1] arrays_overlap;

| arrays_overlap |
| -------------- |
| true           |

要查看数组中是否存在LIKE来自另一个数组的值,一种解决方案是取消嵌套两个数组并将结果与LIKE​​:

SELECT EXISTS (
  SELECT 1
    FROM 
    unnest(ARRAY['abc', 'def' ]) my_array(x)
    INNER JOIN unnest (ARRAY['a', 'z' ]) my_keywords(x)  
        ON my_array.x LIKE '%' || my_keywords.x || '%'
 ) arrays_have_similar_elements;

| arrays_have_similar_elements |
| ---------------------------- |
| true                         |

SELECT EXISTS (
  SELECT 1
    FROM 
    unnest(ARRAY['abc', 'def' ]) my_array(x)
    INNER JOIN unnest (ARRAY['y', 'z' ]) my_keywords(x)  
        ON my_array.x LIKE '%' || my_keywords.x || '%'
 ) arrays_have_similar_elements;

| arrays_have_similar_elements |
| ---------------------------- |
| false                        |

DB Fiddle 上的演示


推荐阅读