PostgreSQL中使用正则排除()字符:给定WHERE子句是否足够?
PostgreSQL中排除字符(和)的正确方法
你提供的WHERE子句无法满足排除(和)的需求,原因如下:
- 你的正则表达式
^.*[^A-Za-z0-9() .-].*$的作用是匹配包含不在指定允许列表(字母、数字、()、空格、点、横杠)中的任意字符的行,这和你想要排除(和)的目标完全相反——它会放行包含(和)但无其他非法字符的行,仅拦截含其他特殊字符的行。
正确的写法
如果你需要筛选**column1中完全不包含(和)**的行,可使用以下两种方式:
方式1:否定正则匹配
WHERE column1 !~ '[()]'
- 说明:
!~是PostgreSQL的正则不匹配操作符,[()]匹配任意一个(或)字符,整个条件表示字段中不存在这两个字符中的任意一个。
方式2:LIKE操作符(更直观)
WHERE column1 NOT LIKE '%(%' AND column1 NOT LIKE '%)%'
- 说明:
%为通配符,NOT LIKE '%(%'确保字段不含(,NOT LIKE '%)%'确保不含),两者结合实现排除目标字符的需求。
额外补充
如果你的实际需求是仅保留包含字母、数字、空格、点、横杠的行(即同时排除(、)及其他所有特殊字符),可修正正则为:
WHERE column1 ~ '^[A-Za-z0-9 .-]*$'
- 说明:
^和$匹配字段首尾,[A-Za-z0-9 .-]*表示允许的字符可出现0次或多次,仅保留符合要求的行。
内容的提问来源于stack exchange,提问作者Adamwahyu Ramdhani
相关产品推荐
相关产品推荐

