SQL转义字符和通配符
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"表示特殊用法标志
3.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
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"表示特殊用法标志
3.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[%]" | 5% |
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)中,它们就被当作普通字符对待了。
1. 用 like "[[]" 匹配特殊字符 "["
select 1 where "[ABCDE" like "[[]%"
2. 用 like "]" 匹配特殊字符 "]"
select 1 where "]ABCDE" like "]%"
3. 用 like "[[]]" 匹配特殊字符 "[]"
select 1 where "[]ABCDE" like "[[]]%%"
4. 用 like "[_]" 匹配特殊字符 "_"
select 1 where "_ABCDE" like "[_]%"
5. 用 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 ""
本文由 www.sqlstudy.com 原创,版权所有,转载请注明作者和出处!
本文链接:http://www.sqlstudy.com/sql_article.php?id=2008061601
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。