T-SQL中带数字匹配的LIKE条件WHERE子句未返回预期结果
问题根因分析
你使用的是SQL Server这类支持[]范围匹配通配符的数据库,这类数据库中LIKE语法里的[0-9]仅能匹配单个0-9的数字字符,这是问题的核心原因。
第一个查询能正常返回结果的原因
你存储的字段值为abcdefg 10 / 20 / 30 sdafadsfas,其中数字部分的片段是10 / 20 / 30。
第一个查询的匹配规则%[0-9] / 20 / [0-9]%,可以命中子串0 / 20 / 3:
- 第一个
[0-9]匹配10的末尾数字0 - 中间固定匹配
/ 20 / - 第二个
[0-9]匹配30的开头数字3
完全符合匹配规则,因此可以返回对应数据。
第二个查询无结果的原因
第二个查询的匹配规则%[0-9] / [0-9] / [0-9]%,要求两个/中间的内容必须是单个数字,但你实际字段值里两个/中间的内容是20(两位数字),不存在符合「单个数字 + 空格/空格 + 单个数字 + 空格/空格 + 单个数字」结构的子串,因此匹配失败无结果返回。
解决方案
如果要匹配多位数字,不推荐使用原生LIKE语法,可使用数据库自带的正则匹配函数:
- SQL Server 2017及以上版本可使用
REGEXP匹配:
WHERE table_a.value REGEXP '[0-9]+ / [0-9]+ / [0-9]+'
- 低版本SQL Server可调整通配符适配多位数字:
WHERE table_a.value LIKE '%[0-9]% / %[0-9]% / %[0-9]%'
内容的提问来源于stack exchange,提问作者Zayfaya83
相关产品推荐
相关产品推荐

