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 参考 » 使用 SQL » SQL 语言元素 » 搜索条件 » LIKE、REGEXP 和 SIMILAR TO 搜索条件

 

SIMILAR TO 搜索条件

将模式与字符串进行匹配。

语法
expression [ NOT ] SIMILAR TO pattern [ ESCAPE escape-expression ]
参数

expression   要在其中进行搜索的表达式。

pattern   在 expression 内搜索的正则表达式。

有关支持的正则表达式语法的详细信息,请参见正则表达式概述

escape-expression   在匹配中要使用的转义字符。缺省的转义字符为零字符,可被指定为 "\x00" 形式的字符串文字。

正则表达式语法 含义
\x 匹配任何等于 x 的字符,其中转义字符采用反斜线字符 (\)。例如,\[ 与 '[' 匹配。
x 任何字符(除了元字符)都与其自身匹配。例如,A 与 'A' 匹配。
注释

要将子串与字符串匹配,应使用百分号通配符 (%expression)。例如,SELECT ... WHERE Description SIMILAR TO 'car' 仅与 car 匹配,与 sportscar 不匹配。但是,SELECT ... WHERE Description SIMILAR TO '%car' 则与 car、sportscar 和所有以 car 结尾的字符串都匹配。

当只依据子字符类进行匹配时,必须包含外部方括号以及用于子字符类的方括号。例如,expression SIMILAR TO '[[:digit:]]')。有关子字符类匹配的详细信息,请参见正则表达式:特殊子字符类

比较是逐个字符执行的,这与等号 (=) 运算符或其它运算符的逐字符串比较不同。例如,在 UCA 归类(归类设置为 UCA 的 CHAR 或 NCHAR)中进行比较时,'?'='AE' 为 true,但 '?' SIMILAR TO 'AE' 为 false。

对于逐个字符进行的匹配比较,被搜索的表达式中的每个字符都必须与 SIMILAR TO 模式中的一个字符或一个通配符匹配。

数据库归类和匹配

SIMILAR TO 使用归类来确定字符等同性并计算字符类范围。例如,如果数据库不区分大小写和重音,则匹配项也不区分大小写和重音。范围也同样使用归类排序顺序进行计算。

有关对 LIKE、SIMILAR TO 和 REGEXP 之间如何处理匹配和范围计算进行的比较,请参见LIKE、REGEXP 和 SIMILAR TO 搜索条件

国家字符 (NCHAR) 支持

SIMILAR TO 搜索条件可以用于比较 CHAR 和 NCHAR 字符串。这种情况下会执行字符集转换,以便使用共同的数据类型进行比较。然后逐个字符地执行比较。请参见CHAR 和 NCHAR 之间的比较

通过在引号引起的值之前加前缀 N(例如,expression SIMILAR TO N'pattern'),可以将 expressionpattern 指定为 NCHAR 字符串文字。还可以使用 CAST 函数将模式转换为 CHAR 或 NCHAR(例如,expression SIMILAR TO CAST(pattern AS datatype))。

请参见字符串文字CAST 函数 [Data type conversion]

另请参见