逻辑函数
以下函数对任意数值类型的参数执行逻辑运算。它们返回 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
,否则。
示例
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
。
示例
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
,如果val
为NULL
。
示例
SELECT NOT(1);
结果
┌─not(1)─┐
│ 0 │
└────────┘
xor
计算两个或多个值的逻辑异或。 对于两个以上的输入值,该函数首先对前两个值进行异或运算,然后将结果与第三个值进行异或运算,依此类推。
语法
xor(val1, val2...)
参数
返回值
1
,对于两个值:如果其中一个值评估为false
而另一个不是,0
,对于两个值:如果两个值都评估为false
或都为true
,NULL
,如果至少一个输入为NULL
示例
SELECT xor(0, 1, 1);
结果
┌─xor(0, 1, 1)─┐
│ 0 │
└──────────────┘