Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 查询数据 » WHERE 子句:指定行

 

WHERE 子句中的匹配字符串

模式匹配是一种识别字符数据的通用方式。在 SQL 中,LIKE 关键字用于搜索模式。模式匹配使用通配符来匹配不同的字符组合。

LIKE 关键字指示其后的字符串是一个匹配模式。LIKE 与字符数据配合使用。

LIKE 的语法为:

expression [ NOT ] LIKE match-expression

将要进行匹配的表达式与匹配表达式进行比较,匹配表达式可以包含以下特殊符号:

符号 含义
% 匹配具有任意数目字符(没有字符或多个字符)的任意字符串
_ 匹配任意一个字符
[指定符]

方括号中的指定符可以采用以下形式:

  • 范围   范围以格式 rangespec1-rangespec2 表示,其中 rangespec1 表示字符范围的开始,连字符表示范围,而 rangespec2 则表示字符范围的结束

  • 集合   集合可包括任何一组离散的值并以任何顺序组成。例如,[a2bR]。

请注意范围 [a-f] 以及集合 [abcdef] 和 [fcbdae] 都返回相同一组值。

[^指定符] 指定符前面的脱字符 (^) 表示不包含。[^a-f] 表示不在范围 a-f 中;[^a2bR] 表示不是 a、2、b 和 R。

您可以将列数据与常量、变量或包含该表中所显示的通配符的其它列匹配。如果使用常量,您应该将匹配子串和字符串括在单引号中。

示例

以下所有示例都将 LIKE 与 Contacts 表中的 Surname 列配合使用。查询格式如下:

SELECT Surname
   FROM Contacts
   WHERE Surname LIKE match-expression;

第一个示例输入以下内容

SELECT Surname
   FROM Contacts
   WHERE Surname LIKE 'Mc%';
匹配表达式 说明 返回值
'Mc%' 搜索所有以字母 Mc 开头的姓名 McEvoy
'%er' 搜索所有以字母 er 结尾的姓名 Brier, Miller, Weaver, Rayner
'%en%' 搜索所有包含字母 en 的姓名。 Pettengill, Lencki, Cohen
'_ish' 搜索所有以字母 ish 结尾的四个字母的姓名。 Fish
'Br[iy][ae]r' 搜索 Brier、Bryer、Briar 或 Bryar。 Brier
'[M-Z]owell' 搜索所有以 owell 结尾、以从 M 到 Z 范围内的某个字母开头的姓名。 Powell
'M[^c]%' 搜索所有以 M 开头、第二个字母不是 c 的名称 Moore, Mulley, Miller, Masalsky
通配符需要使用 LIKE

使用通配符时如果没有 LIKE,则会将该通配符视为字符串文字,而不是模式:它们只代表它们自己的值。以下查询试图查找只由四个字符 415% 组成的所有电话号码。不查找以 415 开头的电话号码。

SELECT Phone
   FROM Contacts
   WHERE Phone = '415%';

另请参见字符串文字

将 LIKE 用于日期和时间值

可以将 LIKE 用于日期和时间字段以及字符数据。在您将 LIKE 与日期和时间值一起使用时,日期将被转换为标准的 DATETIME 格式,然后转换为 VARCHAR。

这便是搜索 DATETIME 值时使用 LIKE 的一个功能。由于日期和时间条目可能包含多种日期格式,所以必须小心编写等同性测试才能成功。

例如,如果将值 9:20 和当前日期插入到一个名为 arrival_time 的列中,则以下子句无法找到该值,原因是该条目中既有日期又有时间:

WHERE arrival_time = '9:20'

但是,下面的子句将会找到值 9:20:

WHERE arrival_time LIKE '%09:20%'
使用 NOT LIKE

对于 NOT LIKE,您可以使用的通配符与可用于 LIKE 的通配符相同。若要查找 Contacts 表中地区号不是 415 的所有电话号码,您可以使用以下这两个查询中的任何一个:

SELECT Phone
   FROM Contacts
   WHERE Phone NOT LIKE '415%';
SELECT Phone
   FROM Contacts
   WHERE NOT Phone LIKE '415%';
使用下划线

另一个可以与 LIKE 一起使用的特殊字符是 _(下划线)字符,下划线只与一个字符匹配。例如,模式 'BR_U%' 与所有以 BR 开头并以 U 作为第四个字母的名称匹配。在 Braun 中,_ 字符与字母 A 匹配,% 与 N 匹配。请参见LIKE 搜索条件