PostgreSQL:无需unnest和string_to_array简化WHERE子句实现精确匹配
实现简洁的精确匹配SQL写法
好问题!要实现精确的大小写不敏感匹配(像你用!~*做包含匹配那样简洁),可以借助PostgreSQL的正则表达式锚点来限定整个字符串匹配,再结合取反操作,写法非常紧凑:
SELECT postdomain FROM post WHERE postdomain !~* '^youtube.com$|^twitter.com$';
为什么这样写能实现精确匹配?
^代表字符串的开头,$代表字符串的结尾,将每个域名用这两个锚点包裹,就确保只有当postdomain的完整值等于youtube.com或twitter.com时才会被匹配,不会出现部分包含的情况(比如不会误匹配sub.youtube.com)。!~*是PostgreSQL里“不匹配正则表达式,且大小写不敏感”的操作符,刚好满足你想要的简洁风格。
如果需要大小写敏感的精确匹配,只需要把!~*换成!~即可:
SELECT postdomain FROM post WHERE postdomain !~ '^youtube.com$|^twitter.com$';
对比你原来用NOT IN结合string_to_array、unnest的写法,这种正则方式语法更简洁,不需要额外的数组处理函数,可读性也更强。
内容的提问来源于stack exchange,提问作者sudoExclamationExclamation
相关产品推荐
相关产品推荐

