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

逻辑函数

下列函数对任意数值类型的参数执行逻辑运算。 它们返回 UInt8 类型的 01,在某些情况下返回 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

Syntax

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)

参数

返回值

返回:

  • val 求值结果为 false 时,返回 1
  • val 求值结果为 true 时,返回 0
  • valNULL 时,返回 NULLNullable(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

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

语法

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

参数

返回值

返回:

  • 1:对于两个参数的情况,当其中一个值求值为 false 且另一个不为 false
  • 0:对于两个参数的情况,当两个值都求值为 false 或都为 true
  • NULL:当至少一个输入值为 NULL 时。 Nullable(UInt8)

示例

基本用法

SELECT xor(0, 1, 1);
0