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 ‘]’ | ] |