SQL Server特殊符号的转义(特殊符号转义 和 使用万能关键词ESCAPE转义)
SQL Server特殊的符号转义(特殊符号转义 和 使用万能关键词ESCAPE转义)
1.在like语句中,使用[] 和 使用Escape 来转义:
特殊符号A类(如% [ [] _,用[]包括起来):
对于特殊字符'%','[','[]', '_' 可以使用 '[]' 把它们包含起来:
select * from [dbo].[Locations] where [state] like '%[%]%'
select * from [dbo].[Locations] where [city] like '%[[]]%'
特殊符号B类(如^ ] -,额外用万能关键字escape 指出来):
对于特殊字符'^', ']', '-' 因为它们本身在包含在 '[]' 中使用,所以需要用另外的方式来转义,于是就引入了 like 中的 escape 子句。
另外值得注意的是:escape 可以转义所有的特殊字符:
select * from [dbo].[Locations] where [city] like '%Beijing]%' escape ']' --将]识别为普通字符
--SQLServer查询的结果是:[city]列中 含Beijing]字符串的所有数据
/* LIKE后跟的 万能转义关键字:escape */
select * from [tableX] where [columnX] LIKE 'AB&%' ESCAPE '&' --将&识别为普通字符
--SQLServer查询的结果是:[columnX]列中结尾是AB&字符串的所有数据
2.使用两个符号作转义(如:单引号' ):
默认情况下,单引号 '是字符串的边界符, 如果在字符串中包含', 则必须使用两个单引号'。第1个'就是转义符:
select * from [dbo].[Locations] where [city] like '%''%' --两个字符,将特殊符号转为普通字符
--SQLServer查询的结果是:[city]列中包含是'字符串的所有数据
上方两个百分号中间的单引号(蓝色背景的),第一个是转义符,第二个是需要查询的条件' 。
select replace('abcdefg''','''','!')
--这个语句是为了把字符串{abcdefg'}里面的{'}替换成{!},所以SqlServer查询的结果是{abcdefg!}
上方蓝色背景的两对单引号,分别都是为了转换为字符串内的一个单引号。( '' ==>' )
replace括号里的三个参数都用引号包含(三个外层引号),与属于字符串部分的引号互不干扰。
------------------------------------------------------------------------------------------------------------------------------
在实际项⽬中,发现对于like操作还有以下特殊字符:下划线“_”,百分号“%”,⽅括号“[]”以及尖号“^”。
其⽤途如下:
下划线(_):⽤于代替⼀个任意字符(相当于正则表达式中的 ? )
百分号(%):⽤于代替任意数⽬的任意字符(相当于正则表达式中的 * )
⽅括号([]):⽤于转义(事实上只有左⽅括号⽤于转义,右⽅括号使⽤最近优先原则匹配最近的左⽅括号)
尖号(^):⽤于排除⼀些字符进⾏匹配(这个与正则表达式中的⼀样)
以下是⼀些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,=操作是没有的。
a_b... a[_]b%
a%b... a[%]b%
a[b... a[[]b%
a]b... a]b%
a[]b... a[[]]b%
a[^]b... a[[][^]]b%
a[^^]b... a[[][^][^]]b%
在实际进⾏处理的时候,对于=操作,我们⼀般只需要如此替换:
' -> ''
对于like操作,需要进⾏以下替换(注意顺序也很重要)
[ -> [[] (这个必须是第⼀个替换的!!)
% -> [%] (这⾥%是指希望匹配的字符本⾝包括的%⽽不是专门⽤于匹配的通配符)
_ -> [_]
^ -> [^]
------------------------------------------------------------------------------------------------------------------------------
·