

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 字符串运算符
<a name="sql-reference-string-operators"></a>

您可以使用流式 SQL 的字符串运算符（包括联接和字符串模式比较）来合并和比较字符串。


| 运算符 | 一元/二进制 | 说明 | 注意 | 
| --- | --- | --- | --- | 
| \|\| | B | 联接 | 也适用于二进制类型 | 
| LIKE | B | 字符串模式比较 | <string> LIKE <like pattern> [ESCAPE <escape character>] | 
| SIMILAR TO | B | 字符串模式比较 | <string> SIMILAR TO <similar to pattern> [ESCAPE <escape character>] | 

## 联接
<a name="CONCAT"></a>

此运算符用于联接一个或多个字符串，如下表所示。


| 操作 | 结果 | 
| --- | --- | 
| 'SQL'\|\|'stream' | SQLstream | 
| 'SQL'\|\|''\|\|'stream' | SQLstream | 
| 'SQL'\|\|'stream'\|\|' Incorporated' | SQLstream 注册成立 | 
| <col1>\|\|<col2>\|\|<col3>\|\|<col4> | <col1><col2><col3><col4> | 

## LIKE 模式
<a name="w2aac10c19c21b9"></a>

LIKE 将字符串与字符串模式进行比较。在模式中，字符“\_”（下划线）和“%”（百分比）具有特殊含义。


| 模式中的字符 | 效果 | 
| --- | --- | 
| \_ | 匹配任何单个字符。 | 
| % | 匹配任何子字符串，包括空字符串 | 
| <any other character> | 只匹配完全相同的字符 | 

如果任一运算对象为 NULL，则 LIKE 运算的结果为 UNKNOWN。

要显式匹配字符串中的特殊字符，必须使用 ESCAPE 子句指定转义字符。然后，转义字符必须位于模式中的特殊字符之前。下表列出了示例。


| 操作 | 结果 | 
| --- | --- | 
| 'a' LIKE 'a' | TRUE | 
| 'a' LIKE 'A' | FALSE | 
| 'a' LIKE 'b' | FALSE | 
| 'ab' LIKE 'a\_' | TRUE | 
| 'ab' LIKE 'a%' | TRUE | 
| 'ab' LIKE 'a\\\_' ESCAPE '\\' | FALSE | 
| 'ab' LIKE 'a\\%' ESCAPE '\\' | FALSE | 
| 'a\_' LIKE 'a\\\_' ESCAPE '\\' | TRUE | 
| 'a%' LIKE 'a\\%' ESCAPE '\\' | TRUE | 
| 'a' LIKE 'a\_' | FALSE | 
| 'a' LIKE 'a%' | TRUE | 
| 'abcd' LIKE 'a\_' | FALSE | 
| 'abcd' LIKE 'a%' | TRUE | 
| '' LIKE '' | TRUE | 
| '1a' LIKE '\_a' | TRUE | 
| '123aXYZ' LIKE '%a%' | TRUE | 
| '123aXYZ' LIKE '\_%\_a%\_' | TRUE | 

## SIMILAR TO 模式
<a name="SIMILARPATTERNS"></a>

SIMILAR TO 将字符串与模式进行比较。很像 LIKE 运算符，但功能更强大，因为模式是正则表达式。

在下面的 SIMILAR TO 表中，*seq* 表示显式指定的字符的任何序列（如 '13aq'）。用于匹配的非字母数字字符前面必须有一个在 SIMILAR TO 语句中明确声明的转义字符，例如 '13aq\\\!' SIMILAR TO '13aq\\\!24br\\\!% ESCAPE '\\'（此语句为 TRUE）。

当指定范围时，例如在模式中使用短划线时，将使用当前的排序序列。典型范围为 0-9 和 a-z。[PostgreSQL](https://www.postgresql.org/docs/7.3/static/functions-matching.html) 提供了模式匹配的典型讨论（包括范围）。

当一行需要多次比较时，将首先匹配可以匹配的最里面的模式，然后匹配“下一个最里面的模式”，依此类推。

在应用周围运算之前计算括在圆括号内的表达式和匹配运算，同样优先计算最里面的项目。


| 分隔符 | 模式中的字符 | 效果 | 规则 ID | 
| --- | --- | --- | --- | 
| 圆括号 (  ) |   (  seq  ) |  为 *seq* 分组（用于定义模式表达式的优先级） | 1 | 
|  方括号 [  ] |  [  seq  ] | 匹配 seq 中的任何单个字符 | 2 | 
|  脱字符或音调符号 |  [^seq] |  匹配不在 seq 中的任何单个字符 | 3 | 
|   |   [ seq ^ seq] | 匹配 seq 中和不在 seq 中的任何单个字符 | 4 | 
| 短划线 |  <character1>-<character2> | 指定字符 1 和字符 2 之间的字符范围<br />（使用一些已知序列，例如 1-9 或 a-z） | 5 | 
|  条形图 |   [ seq  seq] | 匹配任一 seq | 6 | 
|  星号 |   seq\* | 匹配 seq 的零个或多个重复项 | 7 | 
|  加号 |  seq\+ | 匹配 seq 的一个或多个重复项 | 8 | 
|  大括号 |   seq{<number>} | 精确匹配 seq 的重复次数  | 9 | 
|  |   seq{<low number>,<high number>} | 匹配 seq 的低重复次数或更多重复次数，最多匹配高重复次数 | 10 | 
|  问号 |   seq? | 匹配 seq 的零个或一个实例 | 11 | 
|  下划线 |  \_ |  匹配任何单个字符 | 12 | 
|  百分比 |  % |  匹配任何子字符串，包括空字符串 | 13 | 
|  字符 |  <any other character> |  只匹配完全相同的字符 | 14 | 
|   NULL |   NULL |    如果任一操作数为 NULL，则 SIMILAR TO 运算的结果为 UNKNOWN。 | 15 | 
|   非字母数字 |  特殊字符 |  要显式匹配字符串中的特殊字符，<br />该特殊字符前面必须有一个使用<br />在模式末尾指定的 ESCAPE 子句定义的转义字符。 | 16 | 

下表列出了示例。

[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/kinesisanalytics/latest/sqlref/sql-reference-string-operators.html)