模式匹配是一种识别字符数据的通用方式。在 SQL 中,LIKE 关键字用于搜索模式。模式匹配使用通配符来匹配不同的字符组合。
LIKE 关键字指示其后的字符串是一个匹配模式。LIKE 与字符数据配合使用。
LIKE 的语法为:
expression [ NOT ] LIKE match-expression
将要进行匹配的表达式与匹配表达式进行比较,匹配表达式可以包含以下特殊符号:
符号 | 含义 |
---|---|
% | 匹配具有任意数目字符(没有字符或多个字符)的任意字符串 |
_ | 匹配任意一个字符 |
[指定符] |
方括号中的指定符可以采用以下形式:
请注意范围 [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,则会将该通配符视为字符串文字,而不是模式:它们只代表它们自己的值。以下查询试图查找只由四个字符 415% 组成的所有电话号码。不查找以 415 开头的电话号码。
SELECT Phone FROM Contacts WHERE Phone = '415%'; |
另请参见字符串文字。
可以将 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,您可以使用的通配符与可用于 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 搜索条件。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |