PostgreSQL如何在WHERE子句中使用REGEXP筛选不符合格式的记录
PostgreSQL 正则筛选不符合格式的记录
格式规则说明
desc字段的合法格式要求为:
- 字符串开头为连续的英文字母串
- 字母串后紧接3位数字
- 数字后固定为
-(空格+横杠+空格)分隔符 - 分隔符后为任意文本内容
合法格式示例:AMAN032 - Gunting,可拆分为[连续字母][3位数字] - [任意文本]。
查询语句
使用PostgreSQL的!~操作符(即不匹配指定正则)筛选不符合规则的记录,SQL如下:
SELECT urutan, "desc" FROM 替换为你的实际表名 WHERE "desc" !~ '^[A-Za-z]+[0-9]{3} - .+';
注意:
desc是SQL保留关键字,作为字段名查询时需要用双引号包裹。如果业务允许分隔符后为空内容,可以将正则末尾的.+替换为.*。
正则逻辑解释
^:锚定字符串开头,避免字符串中间出现符合规则的片段时被误判为合法[A-Za-z]+:匹配1个及以上大小写英文字母,对应开头的连续字母串[0-9]{3}:精确匹配3位连续数字-:精确匹配固定格式的分隔符.+:匹配分隔符后1个及以上的任意字符
返回结果
执行上述语句后,将精准返回所有不符合格式要求的记录,对应urutan为1434、1435、1437:
- urutan=1434,desc=Oli Bell One AT-D 20W40:字母后未直接连接3位数字,无合法分隔符
- urutan=1435,desc=Water Refill:字母后未直接连接3位数字,无合法分隔符
- urutan=1437,desc=Kabel Ties 20 Cm - 50:开头字母段后存在空格,未直接连接3位数字,不满足前缀要求
内容的提问来源于stack exchange,提问作者riki yudha
相关产品推荐
相关产品推荐

