SQL 语句中的通配符

地址: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

原文地址:https://www.cnblogs.com/dengshiwei/p/4258669.html