sql通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。


SQL 通配符必须与 LIKE 运算符一起使用。


LIKE关键字共有四种通配符。

“%”代表“包含0个或更多字符的任意字符串”;

“—”代表“任何单个字符”;

“[]”代表“指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符”;

“[^]”代表“不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符”。


案例:

SELECT * FROM sysobjects WHERE [name] LIKE '%sys%'---包含字符串"sys"的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE 's_s_t_'---包含单词"s""s""t"并穿插一个任意单词的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '_ysrowsets'---包含一个任意单词开头且以字符串"ysrowsets"结尾的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE 'j%s'---包含单词"j"开头"s"结尾的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '[qe]%'---包含单词"q"或"e"开头的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '[^djsmupftqe]%'---不包含单词"d,j,s,m,u,p,f,t,q,e"开头的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '[^a-s]%'--不包含单词"a"到"s"开头的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '%[_]Ins'---包含单词"_Ins"并以此结尾的所有记录

/*或使用 CHARINDEX 或PATINDEX
返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
*/
UNION ALL
SELECT * FROM sysobjects WHERE CHARINDEX('%s1%',[name])> 0 ---包含单词"s1"的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE PATINDEX('%s1%',[name])> 0 ---包含单词"s1"的所有记录


使用通配符可以编辑复杂的搜索字符串。假如要确定一个字符串是否包含字母A和Z,还有任何数字,这个PARINDEX函数命令可能像这样:
PATINDEX('%[A,Z,0-9]%[A,Z,0-9]%[A,Z,0-9]%','XYZABC123')

 

最后值得说明的是,在使用函数时 charindex > like > padindex  效率依次递减。




--------------------------------------------------------------------------------------------------------------------------------


SQL Like 通配符特殊用法:Escape


%:匹配零个及多个任意字符; _:与任意单字符匹配; []:匹配一个范围; [^]:排除一个范围

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 '/'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值