SQL Server 2012中LIKE语法含%字符的查询问题求助
解决SQL Server中查询包含'8%'字符串的问题
我来帮你搞定这个问题!你遇到的问题是因为对LIKE语句里的通配符规则理解有偏差,咱们一步步来修正。
首先,你原来的查询WHERE [Notes] like '%[8%]%'为什么不对?因为在SQL Server的LIKE语法里,方括号[]是用来匹配单个字符的,里面的内容代表可选的单个字符集合——所以[8%]的意思是匹配一个'8'或者一个'%',整个表达式就会匹配任何包含'8'或者'%'的行,这就是为什么只含'8'的行也被错误筛选出来了。
要准确匹配包含8%这个完整字符串的行,需要把%当成普通字符处理,而不是通配符,这里有两种可靠的写法:
方法1:使用ESCAPE子句指定转义符
可以指定一个自定义的转义字符,把后面的%标记为普通字符,比如用!作为转义符:
WHERE [Notes] LIKE '%8!%%' ESCAPE '!'
这里的逻辑是:
- 开头的
%和结尾的%是通配符,匹配任意长度的字符 8!%里的!告诉SQL Server,后面的%是实际要匹配的字符,不是通配符
方法2:将%放在方括号中
在SQL Server的LIKE语法里,方括号内的%会被视为普通字符,所以可以直接写成:
WHERE [Notes] LIKE '%8[%]%'
这种写法更简洁,8[%]就代表实际的8%字符串,前后的%依然作为通配符匹配任意内容。
你可以任选一种写法测试,都能精准筛选出Notes字段中包含8%的所有行。
内容的提问来源于stack exchange,提问作者user3115933




