字符串运算符 - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

字符串运算符

您可以使用针对流式处理 SQL 的字符串运算符 (包括联接和字符串模式比较) 来组合和比较字符串。

运算符 一元/二元 描述 备注

||

B,

联接

也适用于二元类型

LIKE

B,

字符串模式比较

<string> LIKE <like pattern> [ESCAPE <escape character>]

SIMILAR TO

B,

字符串模式比较

<string> SIMILAR TO <similar to pattern> [ESCAPE <escape character>]

联接

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

操作 结果

'SQL'||'stream'

SQLstream

'SQL'||''||'stream'

SQLstream

'SQL'||'stream'||' Incorporated'

SQLstream Incorporated

<col1>||<col2>||<col3>||<col4>

<col1><col2><col3><col4>

LIKE 模式

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 模式

SIMILAR TO 会将一个字符串与一个模式进行比较。它与 LIKE 运算符非常相似,但更强大,因为模式是正则表达式。

在下面的 SIMILAR TO 表中,seq 表示显式指定的字符的任何序列(如 '13aq')。要匹配的非字母数字字符的前面必须添加在 SIMILAR TO 语句中显式声明的转义字符,例如 '13aq\!' SIMILAR TO '13aq\!24br\!% ESCAPE '\'(此语句为 TRUE)。

当指示了范围时 (即在模式中使用了短划线时),将使用当前的排序序列。典型范围为 0-9 和 a-z。PostgreSQL 提供了模式匹配的典型讨论(包括范围)。

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

用圆括号括起的表达式和匹配运算将在应用外围的运算之前进行计算,同样是依据“最里面的优先”原则。

分隔符 模式中的字符 效果 规则 ID

圆括号 (  )

 (  seq  )

seq 分组(用于定义模式表达式的优先顺序)

1

方括号 [  ]

[  seq  ]

与 seq 中的任意单个字符匹配

2

脱字号或扬抑符

[^seq]

与不在 seq 中的任意单个字符匹配

3

 [ seq ^ seq]

与在 seq 中和不在 seq 中的任意单个字符匹配

4

短划线

<character1>-<character2>

指定 character1 和 character2 之间的一系列字符

(使用一些已知的序列,如 1-9 或 a-z)

5

竖线

 [ seq  seq]

与 seq 或 seq 匹配

6

星号

 seq*

与零个或多个 seq 重复匹配

7

加号

seq+

与一个或多个 seq 重复匹配

8

大括号

 seq{<number>}

与精确数量的 seq 重复匹配

9

 seq{<low number>,<high number>}

将 low number 或更多的 seq 重复匹配 (匹配数最多为 high number)

10

问号

 seq?

与零个或一个 seq 实例匹配

11

下划线

_

与任意单个字符匹配

12

百分号

%

与任意子字符串匹配,包括空字符串

13

字符

<any other character>

仅与完全相同的字符匹配

14

 NULL

 NULL

  如果任一操作数为 NULL,则 SIMILAR TO 运算的结果为 UNKNOWN。

15

 非字母数字

特殊字符

要显式匹配字符串中的某个特殊字符,

该特殊字符的前面必须添加使用 ESCAPE 子句

(在模式末尾指定) 定义的转义字符。

16

下表给出了示例。

操作 结果 Rule

'a' SIMILAR TO 'a'

TRUE

14

'a' SIMILAR TO 'A'

FALSE

14

'a' SIMILAR TO 'b'

FALSE

14

'ab' SIMILAR TO 'a_'

TRUE

12

'ab' SIMILAR TO 'a%'

TRUE

13

'a' SIMILAR TO 'a_'

FALSE

12 & 14

'a' SIMILAR TO 'a%'

TRUE

13

'abcd' SIMILAR TO 'a_'

FALSE

12

'abcd' SIMILAR TO 'a%'

TRUE

13

'' SIMILAR TO ''

TRUE

14

'1a' SIMILAR TO '_a'

TRUE

12

'123aXYZ' SIMILAR TO ''

TRUE

14

'123aXYZ' SIMILAR TO '_%_a%_'

TRUE

13 & 12

'xy' SIMILAR TO '(xy)'

TRUE

1

'abd' SIMILAR TO '[ab][bcde]d'

TRUE

2

'bdd' SIMILAR TO '[ab][bcde]d'

TRUE

2

'abd' SIMILAR TO '[ab]d'

FALSE

2

'cd' SIMILAR TO '[a-e]d'

TRUE

2

'cd' SIMILAR TO '[a-e^c]d'

FALSE

4

'cd' SIMILAR TO '[^(a-e)]d'

INVALID

'yd' SIMILAR TO '[^(a-e)]d'

INVALID

'amy' SIMILAR TO 'amyfred'

TRUE

6

'fred' SIMILAR TO 'amyfred'

TRUE

6

'mike' SIMILAR TO 'amyfred'

FALSE

6

'acd' SIMILAR TO 'ab*c+d'

TRUE

7 & 8

'accccd' SIMILAR TO 'ab*c+d'

TRUE

7 & 8

'abd' SIMILAR TO 'ab*c+d'

FALSE

7 & 8

'aabc' SIMILAR TO 'ab*c+d'

FALSE

'abb' SIMILAR TO 'a(b{3})'

FALSE

9

'abbb' SIMILAR TO 'a(b{3})'

TRUE

9

'abbbbb' SIMILAR TO 'a(b{3})'

FALSE

9

'abbbbb' SIMILAR TO 'ab{3,6}'

TRUE

10

'abbbbbbbb' SIMILAR TO 'ab{3,6}'

FALSE

10

'' SIMILAR TO 'ab?'

FALSE

11

'' SIMILAR TO '(ab)?'

TRUE

11

'a' SIMILAR TO 'ab?'

TRUE

11

'a' SIMILAR TO '(ab)?'

FALSE

11

'a' SIMILAR TO 'a(b?)'

TRUE

11

'ab' SIMILAR TO 'ab?'

TRUE

11

'ab' SIMILAR TO 'a(b?)'

TRUE

11

'abb' SIMILAR TO 'ab?'

FALSE

11

'ab' SIMILAR TO 'a\_' ESCAPE '\'

FALSE

16

'ab' SIMILAR TO 'a\%' ESCAPE '\'

FALSE

16

'a_' SIMILAR TO 'a\_' ESCAPE '\'

TRUE

16

'a%' SIMILAR TO 'a\%' ESCAPE '\'

TRUE

16

'a(b{3})' SIMILAR TO 'a(b{3})'

FALSE

16

'a(b{3})' SIMILAR TO 'a\(b\{3\}\)' ESCAPE '\'

TRUE

16