【SQL】 SQL 通配符(wildcard character)使用

Posted by 西维蜀黍 on 2017-03-12, Last Modified on 2021-11-08

1 SQL 通配符(wildcard character)

通配符可用于替代字符串中的任何字符。在 SQL 中,通配符与 SQL LIKE 操作符一起使用。

通配符 描述
% 替代一个多个字符
_ 仅替代一个字符
[charlist] 字符列的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符

2 Demo

xx%

SELECT * FROM Person WHERE name LIKE 'Ad%'

**含义:**匹配字段 name 以Ad开头的所有元素,比如 name = Ad or name = Adasd

xx_

SELECT * FROM Person WHERE name LIKE 'Ad_'

**含义:**匹配字段 name 以Ad开头,且之后包含一个字符的所有元素,比如 name = Ad1 or name = Adx

[charlist]

SELECT * FROM Person WHERE name LIKE 'Ad[fk]'

**含义:**匹配字段 name 以Ad开头,且之后为 f 或者 k 字符的所有元素,比如 name = Adf or name = Adk

[^charlist]

SELECT * FROM Person WHERE name LIKE 'Ad[^fk]'

**含义:**匹配字段 name 以Ad开头,之后包含一个字符,且该字符不为 f 或者 k 字符的所有元素,比如 name = Ada or name = Adb

混合

SELECT * FROM Person WHERE LastName LIKE '%[fk]%'

**含义:**匹配字段 name 包含 f 或 k 的所有元素,比如 name = f or name = k or name = 111k or name = k222 or name = 222k333

3 转义字符(Escape Character)

某些情况下,我们想匹配出 name = Ad_ 的所有元素,如下面的写法就不行了。这样的写法会匹配出Ad1,Ada等等元素,而不是我们期待的 Ad_,于是需要借助转义符。

SELECT * FROM Person WHERE name LIKE 'Ad_'

注:不同的数据库对不同字符转义的表达可能不同,以下仅做一般意义的总结。

用[]转义% or _

下面例子,匹配出 name 包括 [的元素。

select * from name_column where name LIKE '[[]'

下面例子,匹配出 name 包括 %的元素。

select * from name_column where name LIKE '[%]'

自己定义转移符

通过ESCAPE关键字,可以自己定义转移符。当转义符置于通配符之前时,该通配符就解释为普通字符。

下面例子,匹配出 name 包含 gyan_sagar的元素。

select * from name_column where name like gyan\_sagar **ESCAPE** ‘\’

下面例子,匹配出 name 包含 5%的元素。

select * from name_column 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 ‘]’ ]

各种数据库的转义表达

4参考