LIKE子句和通配符
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。
语法
match_expression
[ NOT ] LIKE pattern [ ESCAPE escape_character ]
参数
match_expression
任何字符串数据类型的有效 SQL Server 表达式。
pattern
match_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符。
通配符
|
描述
|
示例
|
%
|
包含零个或更多字符的任意字符串。
|
WHERE title LIKE '%computer%'
将查找处于书名任意位置的包含单词 computer 的所有书名。
|
_
(下划线)
|
任何单个字符。
|
WHERE au_fname LIKE '_ean'
将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
|
[ ]
|
指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。
|
WHERE au_lname LIKE '[C-P]arsen'
将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。
|
[^]
|
不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
|
WHERE au_lname LIKE 'de[^l]%'
将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。
|
将通配符作为文字使用
可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。下表显示了使用 LIKE 关键字和 [ ] 通配符的示例。
符号
|
含义
|
LIKE '5[%]'
|
5%
|
LIKE '[_]n'
|
_n
|
LIKE '[a-cdf]'
|
a
、b、c、d 或 f
|
LIKE '[-acdf]'
|
-
、a、c、d 或 f
|
LIKE '[ [ ]'
|
[
|
LIKE ']'
|
]
|
LIKE 'abc[_]d%'
|
abc_d
和 abc_de
|
LIKE 'abc[def]'
|
abcd
、abce 和 abcf
|
使用 ESCAPE 子句的模式匹配
可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定由 WHERE comment LIKE '%30!%%' ESCAPE '!' 组成的 WHERE 子句。如果不指定 ESCAPE 和转义符,SQL Server 将返回所有含字符串 30 的行。
下例说明如何在 pubs 数据库 titles 表的 notes 列中搜索字符串"50% off when 100 or more copies are purchased":
USE pubs
GO
SELECT notes
FROM titles
WHERE notes LIKE '50%% off when 100 or more copies are purchased'
ESCAPE '%'
GO
使用 [ ] 通配符
下例查找名字为 Cheryl 或 Sheryl 的作者。
USE pubs
GO
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_fname LIKE '[CS]heryl'
ORDER BY au_lname ASC, au_fname ASC
GO
下例查找姓为 Carson、Carsen、Karson 或 Karsen 的作者所在的行。
USE pubs
GO
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n'
ORDER BY au_lname ASC, au_fname ASC
GO