如何修改SQL LIKE查询,限制new_model_01后的数字位数为3位?
解决方法:精准匹配指定格式的型号名称
嘿,这个问题很好解决,咱们核心就是要把匹配条件从“以new_model_01开头”收紧到“new_model_01后面严格跟着1-3位数字,且没有其他多余字符”。下面分几种常用数据库给你具体方案:
1. MySQL/MariaDB 方案
直接用正则匹配最方便,MySQL支持REGEXP(或RLIKE)操作符,精准限定字符串结构:
SELECT model_name FROM models_table WHERE model_name REGEXP '^new_model_01[0-9]{1,3}$';
解释:
^匹配字符串开头,确保前缀是new_model_01[0-9]{1,3}匹配1到3位数字$匹配字符串结尾,确保后面没有多余字符
2. PostgreSQL 方案
PostgreSQL用~操作符支持正则,写法和MySQL类似:
SELECT model_name FROM models_table WHERE model_name ~ '^new_model_01[0-9]{1,3}$';
或者也可以用SIMILAR TO语法(兼容性稍差但更贴近SQL标准):
SELECT model_name FROM models_table WHERE model_name SIMILAR TO 'new_model_01[0-9]{1,3}';
3. SQL Server 方案
SQL Server的LIKE不支持数量限定,所以有两种思路:
思路一:组合LIKE匹配不同长度
直接枚举1-3位数字的情况:
SELECT model_name FROM models_table WHERE model_name LIKE 'new_model_01[0-9]' OR model_name LIKE 'new_model_01[0-9][0-9]' OR model_name LIKE 'new_model_01[0-9][0-9][0-9]';
思路二:长度校验+数字校验
如果觉得枚举麻烦,也可以通过长度判断+排除非数字字符来实现:
SELECT model_name FROM models_table WHERE model_name LIKE 'new_model_01%' AND LEN(model_name) BETWEEN 12 AND 14 -- 'new_model_01'是11位,加1-3位数字后总长度12-14 AND model_name NOT LIKE 'new_model_01%[^0-9]%'; -- 确保后面全是数字
如果是SQL Server 2017及以上版本,也可以用PATINDEX支持正则:
SELECT model_name FROM models_table WHERE PATINDEX('^new_model_01[0-9]{1,3}$', model_name) > 0;
额外提示
如果你的型号名称里new_model_01后面可能有其他非数字字符(比如字母),正则方案会自动排除这些情况,比单纯的长度判断更可靠哦。
内容的提问来源于stack exchange,提问作者samba
相关产品推荐
相关产品推荐

