PostgreSQL中field_name NOT LIKE ANY与NOT(LIKE ANY)的差异
PostgreSQL中NOT与LIKE ANY的逻辑差异及正确用法
两个表达式的核心逻辑差异
not (field_name like any(array['a','b']))
先执行括号内的判断:检查field_name是否匹配数组里的任意一个元素(即匹配a或者 匹配b),再对这个结果取反。最终筛选出的是**既不匹配a也不匹配b**的记录,完全符合你的需求。field_name not like any(array['a','b'])
这里NOT直接作用在LIKE上,逻辑变成:检查field_name是否不匹配数组中的某一个元素。只要数组里存在一个元素和field_name不匹配,这个条件就成立。比如field_name是a时,它不匹配b,所以这条记录会被选中,这显然不是你要的结果。
更直观的等价写法
如果你要获取既不含a也不含b的记录,除了用带括号的NOT写法,还可以用ALL替代ANY,逻辑更清晰:
field_name not like all(array['a','b'])
这个表达式的字面意思就是field_name不匹配数组里的所有元素,和你需要的"既不含a也不含b"完全一致。
内容的提问来源于stack exchange,提问作者crying hard
相关产品推荐
相关产品推荐

