MATCHES 条件

MATCHES 条件测试匹配字符串。

当 MATCHES 关键字左侧的列值与 MATCHES 关键字右侧的带引号字符串指定的模式匹配时,条件为真或满足条件。您可以在字符串中使用通配符。例如:可以使用方括号来指定字符的范围。有关 MATCHES 的更多信息,请参阅 GBase 8s SQL 指南:语法

在 MATCHES 表达式未列出字符串中一定范围的字符时,它指定文字匹配。对于文字匹配,列的数据类型确定整理注意事项是否起作用,如下所示:
  • 对于 CHAR 和 VARCHAR 列,整理注意事项不起作用。
  • 对于 NCHAR 和 NVARCHAR 列,整理注意事项可能起作用,因为这些数据类型使用本地化顺序,并且语言环境可能定义整理的等价类。

    例如:本地化顺序可以指定 aA 为等价类。也就是说,它们在整理顺序中具有相同的等级。有关本地化顺序的更多信息,请参阅本地化顺序

下表中的示例举例说明:当用户在 SELECT 语句中指定不带范围的 MATCHES 关键字时,CHAR 和 NCHAR 列产生的不同结果。这些示例假定使用在等价类中定义 A a 的非缺省语言环境。另外还假定,在 mytablecol1 是 CHAR 列,col2 是 NCHAR 列。
查询 数据类型 查询结果
SELECT * FROM mytable WHERE col1 MATCHES 'art' CHAR 其列 col1 包含带有小写字母 a 的值 'art' 的所有行
SELECT * FROM mytable WHERE col2 MATCHES 'art' NCHAR 其列 col2 包含值 'art' 或 'Art' 的所有行
当使用 MATCHES 关键字来指定范围时,整理注意事项对具有字符数据类型的所有列均起作用。MATCHES 关键字左侧的列为 NCHAR、NVARCHAR、CHAR、VARCHAR 或 LVARCHAR 数据类型时,MATCHES 关键字的字符串操作数包括方括号 ( [ ] ) 以指定范围,如果语言环境定义了本地化顺序,那么按本地化顺序排序。
重要: 当数据库服务器使用 MATCHES 运算符确定处于某个范围之内的字符时,如果 DB_LOCALE 或 SET COLLATION 已指定某个本地化顺序,那么使用该顺序,甚至对于 CHAR、LVARCHAR 和 VARCHAR 列也是如此。对于数据库服务器将代码集顺序用于 CHAR、LVARCHAR 和 VARCHAR 列上的所有操作以及将本地化顺序(如果定义了本地化顺序的话)用于 NCHAR 和 NVARCHAR 列上排序操作这一规则而言,此行为是一种例外。
一些简单的示例说明当您在 SELECT 语句中使用带有范围的 MATCHES 关键字时,数据库服务器如何处理 NCHAR、NVARCHAR、LVARCHAR、CHAR 和 VARCHAR 列。假定您要从 abonnés 表中检索姓 nom 以从 EP 范围内的字符开头的所有职员的职员编号、名和姓。同时假定 nom 列是 NCHAR 列。以下 SELECT 语句在 WHERE 子句中使用 MATCHES 条件来提出此查询:
SELECT numéro,nom,prénom 
   FROM abonnés
      WHERE nom MATCHES '[E-P]*'
      ORDER BY nom;
ÉtaixÖtkerØverst 的行出现在查询结果中,因为按照本地化顺序,如表 2 所示,加注重音符号的每个名称的首字母处于 nom 列的 EP MATCHES 范围之内。
numéro nom prénom
13608 Étaix Émile
13607 Hammer Gerhard
13602 Hämmerle Greta
13604 LaForêt Jean-Noël
13610 LeMaître Héloïse
13613 Llanero Gloria Dolores
13603 Montaña José Antonio
13611 Oatfield Emily
13605 Ötker Hans-Jürgen
13614 Øverst Per-Anders

如果 nom 为 CHAR 列,那么查询结果与 nom 为 NCHAR 列时的查询结果相同。 数据库服务器始终使用本地化顺序来确定处于某一范围内的字符,不论列是 CHAR 还是 NCHAR。