SQL 语句中的通配符
SQL 语句中的通配符
<DIV align=right>  </DIV>
<DIV align=left>
通配符:
通配符
描述
示例
%
包含零个或更多字符的任意字符串。
WHERE title LIKE '%computer%' 将查处于书名任意位置的包含单词 computer 的所有书名。
_(下划线)
任何单个字符。
WHERE au_fname LIKE '_ean' 将查以 ean 结尾的所有 4 个字母的名字(DeanSean 等)。
[ ]
指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。
WHERE au_lname LIKE '[C-P]arsen' 将查以arsen 结尾且以介于 C P 之间的任何单个字符开始的作者姓氏,例如,CarsenLarsenKarsen 等。
[^]
不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
WHERE au_lname LIKE 'de[^l]%' 将查以 de 开始且其后的字母不为 l 的所有作者的姓氏。
将通配符作为文字使用
可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。下表显示了使用 LIKE 关键字和 [ ] 通配符的示例。
符号
含义
LIKE '5[%]'
5%
LIKE '[_]n'
_n
LIKE '[a-cdf]'
abcd f
LIKE '[-acdf]'
-acd f
LIKE '[ [ ]'
[
LIKE ']'
]
LIKE 'abc[_]d%'
abc_d abc_de
LIKE 'abc[def]'
abcdabce 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"

SELECT notes FROM titles WHERE notes LIKE '50%% off when 100 or more copies are purchased' ESCAPE '%'
</DIV>
上述通配符列表不够全面:
在字符串比较中使用通配符
内含的模式匹配为字符串比较提供了一个多用途工具。下表显示了你可以通过 Like 运算符 使用的通配符和它们匹配的数字或字符串的数目。
样式中的字符
表达式中的匹配
? _(下划线)
任何单一字符
* or %
零个或多个字符
#
任何单一数字(0 — 9
[charlist]
任何在字符表中的单一字符
[!charlist]
任何不在字符表中的单一字符
可用括在括号 ([ ]) 中的一组字符(字符表)来匹配表达式中任何的单一字符,而且字符表中几乎可以包含 <A target=_blank href="javascript:hhobj_1.Click()">ANSI 字符集中的任何字符,包括数字。事实上,特殊字符,如左括号 ([ )、问号(?)、井字号(#)<A target=_blank href="javascript:hhobj_2.Click()">星号(*) 当它们括在括号内时,可以直接和它们自己匹配。一组字符内的右括号 ( ]) 不能匹配它自己,但是如果它是一组之外的单一字符,就能用
来匹配。
除了括在括号内的字符的简单表列,字符表可以指定一字符范围,用连字符号 (-) 来隔开范围的上下界。例如,在样式 中使用 [A-Z] ,可在包含从 A Z 的任何大写字母的表达式内,出相应的字符位置。 可以在括号之中包含多个范围且不需要在范围间划上界线。例如,[a-zA-Z0-9] 指任何符合文数值的字符。
一定要注意,仅当使用 Microsoft Jet 4.X 版和 Microsoft OLE DB Provider for Jet 时,ANSI SQL 通配符 (%) (_) 才可用。若使用 Microsoft Access DAO,则将其视为原义字符。
样式匹配的重要的规则还有:
字符表开头的惊叹号(!),意味着在表达式中寻那些不包括在字符表中的字符。若惊叹号(!)在括号之外,它只匹配它自己。
如果连字符(-)在字符表的开头(如果有惊叹号,则紧跟在惊叹号之后),或在字符表的末尾,则它匹配连字符(-)自己。否则它被视为 ANSI 字符范围的标识。
当您指定一个字符范围时,首尾字符必须以升序的顺序出现(A-Z 0-100)。例如,[A-Z] 是有效的,而 [Z-A] 则无效。
字符顺序 [ ] 忽略不计,被看作<A target=_blank href="javascript:hhobj_3.Click()">零长度字符串 (“”)
Like 运算符
比较<A target=_blank href="javascript:hhobj_1.Click()">字符串表达式和 <A target=_blank href="javascript:hhobj_2.Click()">SQL 表达式中的模式。
语法
expression Like "pattern"
运算符 Like 的语法包含下列部分:
部分
说明
expression
用于 WHERE 子句 SQL 表达式
Pattern
表达式与之比较的字符串或字符串文本。
说明
可用 Like 运算符来出符合指定样式的字段值。对于 pattern,可以指定完整的值(例如,Like "Smith"),或用<A target=_blank href="javascript:hhobj_3.Click()">通配符来出一数值范围(例如,Like "Sm*")
在一表达式中,可用 Like 运算符比较字段值和字符串表达式。例如,如果在 SQL 查询中输入 Like "C*",则查询会返回所有字段中以字母 C 开头的值。 <A target=_blank href="javascript:hhobj_4.Click()">参数查询 中,可以提示用户提供要搜寻的样式。
在下面的例子里,会返回以字母 P 开头、而其后接着介于 A F 之间的任何字母和三个数字的数据:
Like "P[A-F]###"
在下面的列表中说明如何使用 Like 运算符来测试不同样式的表达式。

符合的种类

样式
符合(返回 True
不符合(返回 False
多个字符
a*a
aaaBaaBBBa
aBC
 
*ab*
abcAABBXab
aZbbac
特殊字符
a[*]a
a*a
aaa
多个字符
ab*
abcdefgabc
cabaab
单一字符
a?a
aaaa3aaBa
aBBBa
单一数字
a#a
a0aa1aa2a
aaaa10a
字符范围
[a-z]
fpj
2, &
范围之外
[!a-z]
9, &, %
ba
非数字
[!0-9]
Aa&~
0, 1, 9
组合字
a[!b-m]#
An9az0a99
abcaj0

在搜索数据库中的数据时,您可以使用 SQL 通配符。
SQL 通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
SQL 中,可使用以下通配符:
通配符
描述
%
替代一个或多个字符
_
仅替代一个字符
[charlist]
字符列中的任何单一字符
[^charlist]
或者
[!charlist]
不在字符列中的任何单一字符
原始的表 (用在例子中的)
Persons :
Id
LastName
FirstName
Address
City
1
Adams
John
Oxford Street
London
2
Bush
George
Fifth Avenue
New York
3
单个字符视为长度为1的字符串Carter
Thomas
Changan Street
Beijing
使用 % 通配符
例子 1
现在,我们希望从上面的 "Persons" 表中选取居住在以 "Ne" 开始的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE 'Ne%'
结果集:
Id
LastName
FirstName
Address
City
2
Bush
George
Fifth Avenue
New York
例子 2
接下来,我们希望从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '%lond%'
结果集:
Id
LastName
FirstName
Address
City
1
Adams
John
Oxford Street
London
使用 _ 通配符
例子 1
现在,我们希望从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE FirstName LIKE '_eorge'
结果集:
Id
LastName
FirstName
Address
City
2
Bush
George
Fifth Avenue
New York
例子 2
接下来,我们希望从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er"
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE LastName LIKE 'C_r_er'
结果集:
Id
LastName
FirstName
Address
City
3
Carter
Thomas
Changan Street
Beijing
使用 [charlist] 通配符
例子 1
现在,我们希望从上面的 "Persons" 表中选取居住的城市以 "A" "L" "N" 开头的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE City LIKE '[ALN]%'
结果集:
Id
LastName
FirstName
Address
City
1
Adams
John
Oxford Street
London
2
Bush
George
Fifth Avenue
New York
例子 2

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。