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

逻辑运算符

使用逻辑运算符,可以建立条件并测试其结果。

运算符 一元/二元 描述 操作数

NOT

U

逻辑非

Boolean

AND

B,

Boolean

OR

B,

Boolean

IS

B,

逻辑断言

Boolean

IS NOT UNKNOWN

U

否定未知比较:

<expr> IS NOT UNKNOWN

Boolean

IS NULL

U

Null 比较:

<expr> IS NULL

任何

IS NOT NULL

U

否定 null 比较:

<expr> IS NOT NULL

任何

=

B,

相等

任何

!=

B,

不相等

任何

<>

B,

不相等

任何

>

B,

大于

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

>=

B,

大于或等于 (不小于)

已排序类型

<

B,

小于

已排序类型

<=

B,

小于或等于 (不大于)

已排序类型

BETWEEN

三元

范围比较:

col1 BETWEEN expr1 AND expr2

已排序类型

IS DISTINCT FROM

B,

区别

任何

IS NOT DISTINCT FROM

B,

否定区别

任何

三种状态布尔逻辑

SQL 布尔值具有三种可能的状态而不是常见的两种:TRUE、FALSE 和 UNKNOWN,其中最后一种等效于布尔值 NULL。根据常见的两个状态布尔逻辑,TRUE 和 FALSE 操作数通常正常运行,但在将这两个操作数与 UNKNOWN 操作数配对时,其他规则将适用,如下表中所示。

注意

UNKOWN 表示“可能为 TRUE,可能为 FALSE”,或者换句话说,“不一定为 TRUE 和不一定为 FALSE。” 这种理解可帮助您阐明为何表中的某些表达式在执行时将进行计算。

否定 (NOT)
操作 结果

NOT TRUE

FALSE

NOT FALSE

TRUE

NOT UNKNOWN

UNKNOWN

与 (AND)
操作 结果

TRUE AND TRUE

TRUE

TRUE AND FALSE

FALSE

TRUE AND UNKNOWN

UNKNOWN

FALSE AND TRUE

FALSE

FALSE AND FALSE

FALSE

FALSE AND UNKNOWN

FALSE

UNKNOWN AND TRUE

UNKNOWN

UNKNOWN AND FALSE

FALSE

UNKNOWN AND UNKNOWN

UNKNOWN

或 (OR)
操作 结果

TRUE OR TRUE

TRUE

TRUE OR FALSE

TRUE

TRUE OR UNKNOWN

TRUE

FALSE OR TRUE

TRUE

FALSE OR FALSE

FALSE

FALSE OR UNKNOWN

UNKNOWN

UNKNOWN OR TRUE

TRUE

UNKNOWN OR FALSE

UNKNOWN

UNKNOWN OR UNKNOWN

UNKNOWN

断言 (IS)
操作 结果

TRUE IS TRUE

TRUE

TRUE IS FALSE

FALSE

TRUE IS UNKNOWN

FALSE

FALSE IS TRUE

FALSE

FALSE IS FALSE

TRUE

FALSE IS UNKNOWN

FALSE

UNKNOWN IS TRUE

FALSE

UNKNOWN IS FALSE

FALSE

UNKNOWN IS UNKNOWN

TRUE

IS NOT UNKNOWN
操作 结果

TRUE IS NOT UNKNOWN

TRUE

FALSE IS NOT UNKNOWN

TRUE

UNKNOWN IS NOT UNKNOWN

FALSE

IS NOT UNKNOWN 是一个特殊运算符且单独使用。表达式“x IS NOT UNKNOWN”等效于“(x IS TRUE) OR (x IS FALSE)”,而不是“x IS (NOT UNKNOWN)”。因此,请在上表中替代:

x 操作 结果 替代“(x IS TRUE) OR (x IS FALSE)”中的 x 的结果

TRUE

TRUE IS NOT UNKNOWN

TRUE

变为

“(TRUE IS TRUE) OR (TRUE IS FALSE)”-- 因此为 TRUE

FALSE

FALSE IS NOT UNKNOWN

TRUE

变为

“(FALSE IS TRUE) OR (FALSE IS FALSE)”-- 因此为 TRUE

UNKNOWN

UNKNOWN IS NOT UNKNOWN

FALSE

变为

“(UNKNOWN IS TRUE) OR (UNKNOWN IS FALSE)”-- 因此为 FALSE,

由于 UNKNOWN 既不为 TRUE 也不为 FALSE

由于 IS NOT UNKNOWN 是一个特殊运算符,因此以上运算针对单词 IS 是不可传递的:

操作 结果

NOT UNKNOWN IS TRUE

FALSE

NOT UNKNOWN IS FALSE

FALSE

NOT UNKNOWN IS UNKNOWN

TRUE

IS NULL 和 IS NOT NULL
操作 结果

UNKNOWN IS NULL

TRUE

UNKNOWN IS NOT NULL

FALSE

NULL IS NULL

TRUE

NULL IS NOT NULL

FALSE

IS DISTINCT FROM 和 IS NOT DISTINCT FROM
操作 结果

UNKNOWN IS DISTINCT FROM TRUE

TRUE

UNKNOWN IS DISTINCT FROM FALSE

TRUE

UNKNOWN IS DISTINCT FROM UNKNOWN

FALSE

UNKNOWN IS NOT DISTINCT FROM TRUE

FALSE

UNKNOWN IS NOT DISTINCT FROM FALSE

FALSE

UNKNOWN IS NOT DISTINCT FROM UNKNOWN

TRUE

通常,“x IS DISTINCT FROM y”类似于“x <> y”,在 x 或 y(而非二者)为 NULL 时也为 true 的情况除外。DISTINCT FROM 是和相同项相对的,其通常含义是某个值 (true、false 或 unknown) 等同于其本身,而且不同于所有其他值。IS 和 IS NOT 运算符以特殊方式处理 UNKOWN,因为它表示“可能为 TRUE,可能为 FALSE”。

其他逻辑运算符

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

示例
操作 结果

TRUE AND CAST( NULL AS BOOLEAN)

UNKNOWN

FALSE AND CAST( NULL AS BOOLEAN)

FALSE

1 > 2

FALSE

1 < 2

TRUE

'foo' = 'bar'

FALSE

'foo' <> 'bar'

TRUE

'foo' <= 'bar'

FALSE

'foo' <= 'bar'

TRUE

3 BETWEEN 1 AND 5

TRUE

1 BETWEEN 3 AND 5

FALSE

3 BETWEEN 3 AND 5

TRUE

5 BETWEEN 3 AND 5

TRUE

1 IS DISTINCT FROM 1.0

FALSE

CAST( NULL AS INTEGER ) IS NOT DISTINCT FROM CAST (NULL AS INTEGER)

TRUE