メインコンテンツへスキップ
メインコンテンツへスキップ

論理関数

以下の関数は、任意の数値型の引数に対して論理演算を行います。 戻り値は UInt8 型の 0 または 1、あるいは場合によっては NULL です。

引数が 0 の場合は false、0 以外の値は true と評価されます。

and

導入バージョン: v1.1

2 つ以上の値の論理積(論理 AND)を計算します。

ショートサーキット評価を使用するかどうかは、設定 short_circuit_function_evaluation によって制御されます。 有効な場合は、val_i(val_1 AND val_2 AND ... AND val_{i-1})true のときにのみ評価されます。

たとえばショートサーキット評価が有効な場合、クエリ SELECT and(number = 2, intDiv(1, number)) FROM numbers(5) を実行しても、ゼロ除算の例外は発生しません。 引数が 0 の場合は false と見なされ、0 以外の値は true と見なされます。

構文

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

引数

戻り値

返される値:

  • 少なくとも 1 つの引数が false と評価される場合は 0
  • どの引数も false と評価されず、少なくとも 1 つの引数が NULL の場合は NULL
  • それ以外の場合は 1
    Nullable(UInt8)

基本的な使い方

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

NULL を含む場合

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

not

導入バージョン: v1.1

値の論理否定を行います。 引数が 0 の場合は false と見なされ、0 以外の値は true と見なされます。

構文

not(val)

引数

返り値

返される値は次のとおりです:

  • valfalse と評価される場合は 1
  • valtrue と評価される場合は 0
  • valNULL の場合は NULL Nullable(UInt8)

基本的な使用例

SELECT NOT(1);
0

or

導入: v1.1

2つ以上の値の論理和を計算します。

ショートサーキット評価を使用するかどうかは、short_circuit_function_evaluation 設定で制御されます。 有効にすると、val_i((NOT val_1) AND (NOT val_2) AND ... AND (NOT val_{i-1}))true のときにのみ評価されます。

例えば、ショートサーキット評価を使用すると、クエリ SELECT or(number = 0, intDiv(1, number) != 0) FROM numbers(5) を実行しても、ゼロ除算の例外は発生しません。 引数としてのゼロは false、ゼロ以外の値は true と見なされます。

構文

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

引数

戻り値

戻り値は次のとおりです:

  • 少なくとも 1 つの引数が true と評価された場合は 1
  • すべての引数が false と評価された場合は 0
  • すべての引数が false と評価され、かつ少なくとも 1 つの引数が NULL の場合は NULL
    Nullable(UInt8)

基本的な使い方

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

NULL を含む場合

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

xor

導入バージョン: v1.1

2 つ以上の値に対して排他的論理和 (XOR) を計算します。 入力値が 3 つ以上の場合、この関数は最初に先頭 2 つの値に対して XOR を行い、その結果に 3 つ目の値との XOR を行う、という処理を順に繰り返します。 引数が 0 の場合は false、0 以外の値は true と見なされます。

構文

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

引数

返される値

戻り値:

  • 1 — 2 つの値に対して、一方の値が false と評価され、もう一方が false ではない場合
  • 0 — 2 つの値に対して、両方の値が false、または両方の値が true と評価される場合
  • NULL — 少なくとも 1 つの入力が NULL の場合。 Nullable(UInt8)

基本的な使い方

SELECT xor(0, 1, 1);
0