跳到主要内容
跳到主要内容

逻辑函数

下面的函数对任意 numeric 类型的参数执行逻辑操作。它们返回 01 作为 UInt8,在某些情况下返回 NULL

零作为参数被视为 false,非零值被视为 true

and

引入于: v1.1

计算两个或多个值的逻辑结合。

设置 short_circuit_function_evaluation 控制是否使用短路计算。如果启用,只有在 (val_1 AND val_2 AND ... AND val_{i-1})true 时,才会评估 val_i

例如,使用短路计算时,在执行查询 SELECT and(number = 2, intDiv(1, number)) FROM numbers(5) 时不会抛出除零异常。零作为参数被视为 false,非零值被视为 true

语法

and(val1, val2[, ...])

参数

返回值

返回:

  • 0,如果至少一个参数评估为 false
  • NULL,如果没有参数评估为 false 且至少一个参数为 NULL
  • 1,否则 Nullable(UInt8)

示例

基本用法

SELECT and(0, 1, -2);
0

与 NULL

SELECT and(NULL, 1, 10, -2);
ᴺᵁᴸᴸ

not

引入于: v1.1

计算值的逻辑否定。零作为参数被视为 false,非零值被视为 true

语法

not(val)

参数

返回值

返回:

  • 1,如果 val 评估为 false
  • 0,如果 val 评估为 true
  • NULL,如果 valNULLNullable(UInt8)

示例

基本用法

SELECT NOT(1);
0

or

引入于: v1.1

计算两个或多个值的逻辑析取。

设置 short_circuit_function_evaluation 控制是否使用短路计算。如果启用,只有在 ((NOT val_1) AND (NOT val_2) AND ... AND (NOT val_{i-1}))true 时,才会评估 val_i

例如,使用短路计算时,在执行查询 SELECT or(number = 0, intDiv(1, number) != 0) FROM numbers(5) 时不会抛出除零异常。零作为参数被视为 false,非零值被视为 true

语法

or(val1, val2[, ...])

参数

返回值

返回:

  • 1,如果至少一个参数评估为 true
  • 0,如果所有参数评估为 false
  • NULL,如果所有参数评估为 false 且至少一个参数为 NULL Nullable(UInt8)

示例

基本用法

SELECT or(1, 0, 0, 2, NULL);
1

与 NULL

SELECT or(0, NULL);
ᴺᵁᴸᴸ

xor

引入于: v1.1

计算两个或多个值的逻辑排他性析取。对于超过两个的输入值,该函数首先将前两个值进行异或运算,然后将结果与第三个值进行异或,依此类推。零作为参数被视为 false,非零值被视为 true

语法

xor(val1, val2[, ...])

参数

返回值

返回:

  • 1,对于两个值:如果其中一个值评估为 false,而另一个则不
  • 0,对于两个值:如果两个值都评估为 false 或都评估为 true
  • NULL,如果至少一个输入为 NULLNullable(UInt8)

示例

基本用法

SELECT xor(0, 1, 1);
0