如何编写SQL WHERE子句筛选特定格式的项目编号
筛选指定格式项目编号的WHERE子句写法
通用LIKE语法方案(兼容多数SQL数据库)
直接通过LIKE结合数字范围通配符[0-9],精确匹配两种目标格式,避免多余匹配:
WHERE -- 匹配C开头+4位数字(无后续字符) Projectnumber LIKE 'C[0-9][0-9][0-9][0-9]' OR -- 匹配C开头+4位数字+下划线+3位数字(无后续字符) Projectnumber LIKE 'C[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9]'
注:部分数据库(如MySQL)默认LIKE不支持
[0-9]范围通配符,需改用正则方案。
正则表达式方案(更简洁,按需适配数据库)
不同数据库的正则语法略有差异,以下是主流数据库的写法:
- MySQL/MariaDB:
WHERE Projectnumber REGEXP '^C[0-9]{4}$|^C[0-9]{4}_[0-9]{3}$' - PostgreSQL:
WHERE Projectnumber ~ '^C\d{4}$|^C\d{4}_\d{3}$' - SQL Server:
WHERE PATINDEX('^C[0-9]{4}$', Projectnumber) > 0 OR PATINDEX('^C[0-9]{4}_[0-9]{3}$', Projectnumber) > 0
原写法问题说明
你之前用的WHERE Projectnumber LIKE 'C____%'存在两个问题:
- 下划线
_匹配任意单个字符,而非仅数字,会包含Cabcd这类不符合的项; - 末尾的
%允许后续任意字符,会匹配C1234_1234、C12345这类超出规则的项目编号。
内容的提问来源于stack exchange,提问作者Julia Himmels
相关产品推荐
相关产品推荐

