SQL中同时使用LIKE与ANY实现文本数组元素模糊匹配查询问题
错误原因说明
你原有的SQL无法执行主要有两个核心问题:
- PostgreSQL 中字符串拼接使用的运算符是
||而非+ ANY关键字不能直接和拼接表达式组合后作为LIKE语法的匹配项,需要先完成数组元素的通配符拼接再做匹配
正确实现方式
写法1:EXISTS + unnest 拆解数组(兼容性最好,全版本支持)
这种写法逻辑直观,也方便后续加额外的匹配规则:
SELECT * FROM myTable WHERE EXISTS ( SELECT 1 FROM unnest(args) AS arg_item WHERE feature LIKE '%' || arg_item || '%' );
如果需要大小写不敏感的匹配,把LIKE替换为ILIKE即可。
写法2:LIKE ANY 预加工数组(写法更简洁)
先把数组内所有元素都拼接前后通配符,再直接用LIKE ANY判断:
SELECT * FROM myTable WHERE feature LIKE ANY ( ARRAY(SELECT '%' || elem || '%' FROM unnest(args) AS elem) );
内容的提问来源于stack exchange,提问作者Евгения Рубанова
相关产品推荐
相关产品推荐

