如何使用T-SQL正则表达式实现指定规则的邮政编码匹配
T-SQL邮政编码匹配校验方案
你之前编写的[WB][S1-9]规则存在逻辑漏洞:该规则会匹配首字符为W/B、次字符为S/1-9的任意组合,没有对两种首字符对应的次字符规则做区分,因此会出现W1、BS这类不符合要求的匹配结果。
方案1:兼容所有SQL Server版本的原生写法(无需正则扩展)
直接通过T-SQL原生的LIKE关键字拆分两个校验条件即可,性能和兼容性最优:
-- 替换为你自己的表和字段名即可使用 SELECT * FROM 你的业务表 WHERE -- 匹配首字符为W、次字符为S的规则 邮编字段 LIKE 'WS%' -- 匹配首字符为B、次字符为数字的规则 OR 邮编字段 LIKE 'B[0-9]%'
如果需要精确匹配长度,可以自行调整通配符:例如要求邮编总长度为6、后4位均为数字的话,可以把%替换为4个[0-9],即LIKE 'WS[0-9][0-9][0-9][0-9]'。如果要求B开头的第二位不能为0,把[0-9]替换为[1-9]即可。
方案2:SQL Server 2022及以上版本使用原生正则函数
如果你的数据库版本支持REGEXP_LIKE正则函数,可以直接使用分支正则表达式实现:
正则规则:^(WS|B[0-9])
使用示例:
SELECT * FROM 你的业务表 WHERE REGEXP_LIKE(邮编字段, '^(WS|B[0-9])')
正则逻辑说明:
^限定从字符串首位开始匹配,避免中间字符命中规则(WS|B[0-9])是分支匹配逻辑,仅命中两种合法场景:前两位为WS,或者第一位为B且第二位为0-9的数字
内容的提问来源于stack exchange,提问作者Richard Watts
相关产品推荐
相关产品推荐

