SQL中escape
的主要用途
1.使用ESCAPE
关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5%
的字符串,请使用:
WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
2.ESCAPE 'escape_character'
允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character
是放在通配符前表示此特殊用途的字符。
SELECT *
FROM finances
WHERE description LIKE 'gs_' ESCAPE 'S'
GO
意思就是:
比如,我们要搜索一个字符串 “g_
” ,如果直接 like "g_"
,那么 "_
"的作用就是通配符,而不是字符,结果,我们会查到比如 "ga","gb","gc"
,而不是我们需要的 “g_
”.
用 LIKE 'gs_' ESCAPE 'S'
's
'表示特殊用法标志
CREATE TABLE a
(
NAME VARCHAR(10)
)
go
INSERT INTO a
SELECT '11%22'
UNION ALL
SELECT '11%33'
UNION ALL
SELECT '12%33'
go
SELECT *
FROM a
WHERE NAME LIKE '%/%33' ESCAPE '/' --指定用'/'符号来说明跟在其后面的通配符字符为普能字符。(第二个%是字符不是通配符来的)
go
DROP TABLE a
结果为:
name
----------
11%33
12%33
%
:匹配零个及多个任意字符; _
:与任意单字符匹配; []
:匹配一个范围; [^]
:排除一个范围
Symbol | Meaning |
---|---|
like '5[%]' | 0.05 |
like '[_]n' | _n |
like '[a-cdf]' | a, b, c, d, or f |
like '[-acdf]' | -, a, c, d, or f |
like '[[]' | [ |
like ']' | ] |
like 'abc[_]d%' | abc_d and abc_de |
like 'abc[def]' | abcd, abce, and abcf |
like '[^1-9]' | 0 |
like '[^1-9b-z]' | 0, a |
对于字符串中出现的特殊字符:’%
’,’['
,’[]
’, ‘_
’ 可以使用 ‘[]
’ 把它们包含起来, 这样在匹配模式(pattern
)中,它们就被当作普通字符对待了。
- 用
like '[[]'
匹配特殊字符 ‘[
’
select 1 where '[ABCDE' like '[[]%'
- 用
like ']'
匹配特殊字符 ‘]
’
select 1 where ']ABCDE' like ']%'
- 用
like '[[]]'
匹配特殊字符 ‘[]
’
select 1 where '[]ABCDE' like '[[]]%%'
- 用 like ‘
[_]
’ 匹配特殊字符 ‘_
’
select 1 where '_ABCDE' like '[_]%'
-
用
like '[%]'
匹配特殊字符 ‘%
’
select 1 where 'ABC%DE' like 'ABC[%]DE'
对于其他的特殊字符:’^
’, ‘-
’, ‘]
’ 因为它们本身在包含在 ‘[]
’ 中使用,所以需要用另外的方式来转义,于是就引入了 like
中的 escape
子句,另外值得注意的是:escape
可以转义所有的特殊字符。
SELECT 1
WHERE '^ABCDE' LIKE '!^ABCDE' ESCAPE '!'
SELECT 1
WHERE '-ABCDE' LIKE '!-ABCDE' ESCAPE '!'
SELECT 1
WHERE ']ABCDE' LIKE '!]ABCDE' ESCAPE '!'
SELECT 1
WHERE '%ABCDE' LIKE '\%ABCDE' ESCAPE '\'
SELECT 1
WHERE '%ABCDE' LIKE '!%ABCDE' ESCAPE '!'
SELECT 1
WHERE '%ABCDE' LIKE '#%ABCDE' ESCAPE '#'
SELECT 1
WHERE '%ABCDE' LIKE '@%ABCDE' ESCAPE '@'
SELECT 1
WHERE '[ABCDE' LIKE '![ABCDE' ESCAPE '!'
SELECT 1
WHERE ']ABCDE' LIKE '!]ABCDE' ESCAPE '!'
看出规律了吧,就是用 escape
后面紧跟着的字符来做转义字符。 escape
后面的字符相当于 C
语言字符串中的转义字符 ‘\
’。
最后,看一个更加复杂的匹配
select 1 where '[^A-Z]ABCDE' like '\[\^A\-Z\]%' escape '\'