地址:http://blog.sina.com.cn/s/blog_4291fcdb010009ry.html
SQL 语句中的通配符
通配符:
通配符 | 描述 | 示例 |
% | 包含零个或更多字符的任意字符串。 | 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":
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 | aa,aBa,aBBBa | aBC |
|
*ab* | abc,AABB,Xab | aZb,bac |
特殊字符 | a[*]a | a*a | aaa |
多个字符 | ab* | abcdefg,abc | cab,aab |
单一字符 | a?a | aaa,a3a,aBa | aBBBa |
单一数字 | a#a | a0a,a1a,a2a | aaa,a10a |
字符范围 | [a-z] | f,p,j | 2, & |
范围之外 | [!a-z] | 9, &, % | b,a |
非数字 | [!0-9] | A,a,&,~ | 0, 1, 9 |
组合字 | a[!b-m]# | An9,az0,a99 | abc,aj0 |