SQL Server 2014 LIKE表达式严格匹配带前缀短横线字符串问题
解决SQL Server 2014中LIKE表达式的严格匹配问题
嘿,我来帮你搞定这个困扰你的LIKE匹配问题!你需要严格匹配A-任意字符-任意字符的格式,现在的问题是会把不带短横线的结果也捞出来,这是因为之前的LIKE表达式写得太宽松了,咱们来调整一下。
核心问题分析
你之前的LIKE可能是类似LIKE 'A%'这种,它会匹配所有以A开头的字符串,不管有没有短横线。要实现严格匹配,必须强制要求字符串里包含两个短横线,且第一个短横线紧跟在开头的A后面。
解决方案
根据你的需求,我给你几个不同严格程度的写法:
1. 基础严格匹配(确保有两个短横线,开头是A)
这个写法能过滤掉不带短横线或者只有一个短横线的字符串,适合只要格式里有两个短横线的场景:
SELECT STR FROM 你的表名 WHERE STR LIKE 'A-%-%'
比如你的表中有这些数据:
- A-ABC123-AABB
- A12345
- A-XYZ789-CCDD
- A-TEST
用这个语句会返回:A-ABC123-AABB 和 A-XYZ789-CCDD,正好符合你的要求。
2. 更严格的匹配(确保正好两个短横线,且第一个紧跟A)
如果需要确保字符串里只有两个短横线,且第一个短横线必须在A的后面(也就是第2个字符位置),可以用这个组合:
SELECT STR FROM 你的表名 WHERE STR LIKE 'A%' AND LEN(STR) - LEN(REPLACE(STR, '-', '')) = 2 -- 确保正好2个短横线 AND CHARINDEX('-', STR) = 2 -- 第一个短横线紧跟在A后面
这个写法会彻底排除那些有多余短横线(比如A-AA-BB-CC)或者第一个短横线不在A后面的字符串(比如AA-BB-CC),匹配精度更高。
3. 极致严格匹配(中间和末尾部分不含短横线,且非空)
如果要求中间的ABC123和末尾的AABB部分不能包含短横线,且必须至少有一个字符,可以再加上这些条件:
SELECT STR FROM 你的表名 WHERE STR LIKE 'A%' AND LEN(STR) - LEN(REPLACE(STR, '-', '')) = 2 AND CHARINDEX('-', STR) = 2 AND RIGHT(STR, 1) != '-' -- 确保末尾不是短横线 AND CHARINDEX('-', STR, 3) < LEN(STR) -- 确保第二个短横线不在最后一位
这个写法会完全符合你描述的A-ABC123-AABB格式,没有任何例外。
为什么之前的写法不对?
举个例子,如果你用LIKE 'A%',它会匹配所有以A开头的字符串,不管有没有短横线。而我们上面的写法通过强制短横线的数量和位置,精准锁定了你需要的格式,自然就不会返回那些不符合的结果了。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

