您的位置:首页 > 数据库

SQL查询中的通配符字符转义

2012-12-17 14:10 239 查看
SQL查询中的通配符字符转义

最近项目中查询数据SQL,碰到“_”通配符的问题,查了一下资料,归结如下:

如果想查找“_name”或“%name”结尾的客户:

select * from userinfo where username like '%_name'

select * from userinfo where username like '%%name'

这两条语句显然是不行的,因为SQL中“_”是替代符,指任意一个字符,“%”是通配符,指任意0个或多个字符,所以要想查出正确结果,需要做字符转义,通常有两种写法:

select * from [user] where loginname like '%[_]name'

select * from [user] where loginname like '%/_name' escape '/'

第一种写法貌似在oracle数据库下不行,我在PL/SQL下似乎查不出结果,可能其他数据库是可以的?

第二种写法在oracle数据库和informix数据库都可行,注意,如果like条件中有多个字段含“_”需要转义,每个like字段后都要带有escape '/',其中转义符可以任意字符,如“\”,只要前后保持一致就行。

SQL中的通配符-含义表

通配符 含义

% 包含零个或更多字符的任意字符串。

_ 任何单个字符。

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

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

例如:

LIKE 'ch%' 将搜索以字母 ch 开头的所有字符串(如 china,chinaese)。

LIKE '%ese' 将搜索以字母 ese 结尾的所有字符串(如 chinese、xxyxxese)。

LIKE '%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Kennet、Green)。

LIKE '_ok' 将搜索以字母ok结尾的所有三个字母的名称(如 jok、sok)。

LIKE '[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。

LIKE '[M-Z]ing' 将搜索以字符串 ing 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ring)。

LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如 MacFeather)。

使用 ESCAPE 关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用:

WHERE ColumnA LIKE '%5/%%' ESCAPE '/'符号 含义

LIKE '5[%]' 5%

LIKE '5%' 5 后跟 0 个或更多字符的字符串

LIKE '[_]n' _n

LIKE '_n' an, in, on (and so on)

LIKE '[a-cdf]' a, b, c, d, or f

LIKE '[-acdf]' -, a, c, d, or f

LIKE '[ [ ]' [

LIKE ']' ]

实例说明:在表Personal中查找username字段中含有"["的记录。

可用三条语句:

1、select username,* from Personal where username like '%[%' escape ''

2、(说明"\"与"/"均可与escape关键字结合作为转义符)

select username,* from Personal where username like '%/[%' escape '/'

3、select username,* from Personal where charindex('[',username)>0

4、select username,* from Personal where username like '%[[]%'

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息