逻辑运算符 - Amazon Kinesis Data Analytics

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

逻辑运算符

逻辑运算符允许您建立条件并测试其结果。

操作符 一元/二进制 描述 运算元

NOT

U

逻辑非

布尔值

AND

B

连词

布尔值

B

分离

布尔值

IS

B

逻辑断言

布尔值

不是未知的

U

否定未知比较:

<expr> IS NOT UNKNOWN

布尔值

IS NULL

U

空比较:

<expr> IS NULL

任何

IS NOT NULL

U

否定空值比较:

<expr> IS NOT NULL

任何

=

B

平等

任何

!=

B

不平等

任何

<>

B

不平等

任何

>

B

大于

有序类型(数字、字符串、日期、时间)

>=

B

大于或等于

有序类型

<

B

小于

有序类型

<=

B

小于或等于(不大于)

有序类型

BETWEEN

三元

续航里程对比:

col1 介于 expr1 和 expr2 之间

有序类型

IS DISTINCT FROM

B

区别

任何

与没有区别

B

否定区别

任何

三态布尔逻辑

SQL 布尔值有三种可能的状态,而不是通常的两种状态:TRUE、FALSE 和 UNKNOWN,最后一种状态等同于布尔值 NULL。TRUE 和 FALSE 操作数通常按照普通的两态布尔逻辑运行,但是将它们与 UNKNOWN 操作数配对时会适用其他规则,如下表所示。

注意

UNKOWN 代表 “可能是真的,可能是错误的”,或者换句话说,“不绝对是真的,也不是绝对是错误的”。这种理解可以帮助您阐明为什么表中的某些表达式的计算方式与实际相同。

否定(不是)
运算 结果

不是真的

FALSE

不是假的

TRUE

不是未知的

UNKNOWN

连词(和)
运算 结果

真实与真实

TRUE

对与错

FALSE

真实和未知

UNKNOWN

假与真

FALSE

假与假

FALSE

虚假和未知

FALSE

未知和真实

UNKNOWN

未知和错误

FALSE

未知和未知

UNKNOWN

分离 (OR)
运算 结果

TRUE

TRUE

TRUE

TRUE

TRUE

TRUE

TRUE

TRUE

TRUE

FALSE

假或未知

UNKNOWN

未知或TRUE

TRUE

未知或FALE

UNKNOWN

未知或未知

UNKNOWN

断言 (IS)
运算 结果

TRUE

TRUE

真是假

FALSE

真是未知

FALSE

假是真的

FALSE

假设置为 “假”

TRUE

假是未知的

FALSE

未知是TRUE

FALSE

未知设置为 “假”

FALSE

未知是未知的

TRUE

不是未知的
运算 结果

真不是未知的

TRUE

FALSE 不是未知的

TRUE

未知不是未知

FALSE

IS NOT UNKNOWN 本身就是一个特殊的运算符。表达式 “x 不是未知” 等效于 “(x 为真) 或 (x 为假)”,而不是 “x 是(非未知)”。因此,在上表中替换为:

x 运算 结果 在 “(x 为真) 或 (x 为假)” 中替换 x 的结果

TRUE

真不是未知的

TRUE

变成

“(真是假)或(真是假)” ——因此是真的

FALSE

FALSE 不是未知的

TRUE

变成

“(假是真的)或(假是假的)” ——因此是真的

UNKNOWN

未知不是未知

FALSE

变成

“(未知为真)或(未知为假)” ——因此为假,

因为未知既不是真也不是假

由于 IS NOT UNKNOWN 是一个特殊运算符,所以上面的操作不是围绕 IS 这个词传递的:

运算 结果

TRUE

FALSE

NOT UNOT

FALSE

不是未知就是未知

TRUE

为空时且不为 NULL
运算 结果

未知设置为 “空”

TRUE

未知不为空

FALSE

空设置为 “空”

TRUE

空不是空

FALSE

不同于和没有区别
运算 结果

未知与真实不同

TRUE

未知与假不同

TRUE

未知与未知不同

FALSE

未知与真没有区别

FALSE

未知与假没有区别

FALSE

未知与未知没有区别

TRUE

通常,“x IS DISTINCT FROM y”类似于“x <> y”,在 x 或 y(而非二者)为 NULL 时也为 true 的情况除外。DISTINCT FROM 与 distinct FROM 相反,后者的通常含义是某个值(真、假或未知)与其自身相同,与其他所有值不同。IS 和 IS NOT 运算符以特殊的方式对待 UNKOWN,因为它代表 “可能是真的,可能是错误的”。

其他逻辑运算符

对于所有其他运算符,传递 NULL 或 UNKNOWN 操作数将导致结果为 UNKNOWN(与 NULL 相同)。

示例
运算 结果

真值和强制转换(空值为布尔值)

UNKNOWN

FALSE 并强制转换(空值为布尔值)

FALSE

1 > 2

FALSE

1 < 2

TRUE

'foo' = 'bar'

FALSE

'foo' <> 'bar'

TRUE

'foo' <= 'bar'

FALSE

'foo' <= 'bar'

TRUE

3 介于 1 和 5 之间

TRUE

1 介于 3

FALSE

3 介于 3

TRUE

5 介于 3 和 5 之间

TRUE

1 与 1.0 不同

FALSE

强制转换(空为整数)与强制转换(空为整数)没有区别

TRUE