跳至主要内容

逻辑函数

以下函数对任意数值类型的参数执行逻辑运算。它们返回 0 或 1 作为 UInt8,或者在某些情况下返回 NULL

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

and

计算两个或多个值的逻辑与。

设置 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) 时不会抛出除以零异常。

语法

and(val1, val2...)

别名:AND 运算符

参数

返回值

  • 0,如果至少一个参数计算结果为 false
  • NULL,如果没有任何参数计算结果为 false 且至少一个参数为 NULL
  • 1,否则。

类型:UInt8Nullable(UInt8)。

示例

SELECT and(0, 1, -2);

结果

┌─and(0, 1, -2)─┐
│ 0 │
└───────────────┘

包含 NULL 的情况

SELECT and(NULL, 1, 10, -2);

结果

┌─and(NULL, 1, 10, -2)─┐
│ ᴺᵁᴸᴸ │
└──────────────────────┘

or

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

设置 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) 时不会抛出除以零异常。

语法

or(val1, val2...)

别名:OR 运算符

参数

返回值

  • 1,如果至少一个参数计算结果为 true
  • 0,如果所有参数计算结果都为 false
  • NULL,如果所有参数计算结果都为 false 且至少一个参数为 NULL

类型:UInt8Nullable(UInt8)。

示例

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

结果

┌─or(1, 0, 0, 2, NULL)─┐
│ 1 │
└──────────────────────┘

包含 NULL 的情况

SELECT or(0, NULL);

结果

┌─or(0, NULL)─┐
│ ᴺᵁᴸᴸ │
└─────────────┘

not

计算值的逻辑非。

语法

not(val);

别名:否定运算符

参数

返回值

  • 1,如果 val 计算结果为 false
  • 0,如果 val 计算结果为 true
  • NULL,如果 valNULL

类型:UInt8Nullable(UInt8)。

示例

SELECT NOT(1);

结果

┌─not(1)─┐
│ 0 │
└────────┘

xor

计算两个或多个值的逻辑异或。对于两个以上的输入值,函数首先对前两个值进行异或,然后将结果与第三个值进行异或,依此类推。

语法

xor(val1, val2...)

参数

返回值

  • 1,对于两个值:如果其中一个值计算结果为 false 而另一个值不为 false
  • 0,对于两个值:如果两个值都计算结果为 false 或都为 true
  • NULL,如果至少一个输入为 NULL

类型:UInt8Nullable(UInt8)。

示例

SELECT xor(0, 1, 1);

结果

┌─xor(0, 1, 1)─┐
│ 0 │
└──────────────┘