演算子
ClickHouseは、クエリ解析段階で、優先順位、適用性、および結合性に応じて演算子を対応する関数に変換します。
アクセス演算子
a[N]
– 配列の要素へのアクセス。arrayElement(a, N)
関数。
a.N
– タプル要素へのアクセス。tupleElement(a, N)
関数。
数値否定演算子
-a
– negate(a)
関数。
タプルの否定については: tupleNegate。
乗算および除算演算子
a * b
– multiply(a, b)
関数。
数値によるタプルの乗算については: tupleMultiplyByNumber、スカラー積については: dotProduct。
a / b
– divide(a, b)
関数。
数値によるタプルの除算については: tupleDivideByNumber。
a % b
– modulo(a, b)
関数。
加算および減算演算子
a + b
– plus(a, b)
関数。
タプル加算については: tuplePlus。
a - b
– minus(a, b)
関数。
タプル減算については: tupleMinus。
比較演算子
equals 関数
a = b
– equals(a, b)
関数。
a == b
– equals(a, b)
関数。
notEquals 関数
a != b
– notEquals(a, b)
関数。
a <> b
– notEquals(a, b)
関数。
lessOrEquals 関数
a <= b
– lessOrEquals(a, b)
関数。
greaterOrEquals 関数
a >= b
– greaterOrEquals(a, b)
関数。
less 関数
a < b
– less(a, b)
関数。
greater 関数
a > b
– greater(a, b)
関数。
like 関数
a LIKE s
– like(a, b)
関数。
notLike 関数
a NOT LIKE s
– notLike(a, b)
関数。
ilike 関数
a ILIKE s
– ilike(a, b)
関数。
BETWEEN 関数
a BETWEEN b AND c
– a >= b AND a <= c
と同じ。
a NOT BETWEEN b AND c
– a < b OR a > c
と同じ。
データセットを操作するための演算子
in 関数
a IN ...
– in(a, b)
関数。
notIn 関数
a NOT IN ...
– notIn(a, b)
関数。
globalIn 関数
a GLOBAL IN ...
– globalIn(a, b)
関数。
globalNotIn 関数
a GLOBAL NOT IN ...
– globalNotIn(a, b)
関数。
in サブクエリ関数
a = ANY (subquery)
– in(a, subquery)
関数。
notIn サブクエリ関数
a != ANY (subquery)
– a NOT IN (SELECT singleValueOrNull(*) FROM subquery)
と同じ。
in サブクエリ関数
a = ALL (subquery)
– a IN (SELECT singleValueOrNull(*) FROM subquery)
と同じ。
notIn サブクエリ関数
a != ALL (subquery)
– notIn(a, subquery)
関数。
例
ALLを使用したクエリ:
結果:
ANYを使用したクエリ:
結果:
日付および時間を操作するための演算子
EXTRACT
指定された日付から部分を抽出します。たとえば、指定された日付から月を取得したり、時間から秒を取得したりできます。
part
パラメータは、抽出する日付の部分を指定します。次の値が使用できます:
DAY
— 月の日。可能な値: 1–31。MONTH
— 月の番号。可能な値: 1–12。YEAR
— 年。SECOND
— 秒。可能な値: 0–59。MINUTE
— 分。可能な値: 0–59。HOUR
— 時間。可能な値: 0–23。
part
パラメータは大文字と小文字を区別しません。
date
パラメータは処理する日付または時間を指定します。Date または DateTime 型がサポートされています。
例:
以下の例では、テーブルを作成し、DateTime
型の値を挿入します。
testsに他の例も参照できます。
INTERVAL
Interval 型の値を作成し、Date および DateTime 型の値との算術演算に使用できます。
インターバルのタイプ:
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
INTERVAL
値を設定する際に文字列リテラルを使用することもできます。たとえば、INTERVAL 1 HOUR
は INTERVAL '1 hour'
または INTERVAL '1' hour
と同じです。
異なるタイプのインターバルは組み合わせることができません。INTERVAL 4 DAY 1 HOUR
のような式は使用できません。最小単位以下の単位でインターバルを指定してください。たとえば、INTERVAL 25 HOUR
などです。以下の例のように、連続して操作を使用することができます。
例:
INTERVAL
構文または addDays
関数が常に推奨されます。now() + ...
のような単純な加算や減算は、時間設定を考慮しません。たとえば、夏時間です。
例:
参照
- Interval データ型
- toInterval 型変換関数
論理 AND 演算子
構文 SELECT a AND b
— a
と b
の論理積を and 関数で計算します。
論理 OR 演算子
構文 SELECT a OR b
— a
と b
の論理和を or 関数で計算します。
論理否定演算子
構文 SELECT NOT a
— a
の論理否定を not 関数で計算します。
条件演算子
a ? b : c
– if(a, b, c)
関数。
注意:
条件演算子はbとcの値を計算し、次に条件aが満たされているかを確認し、対応する値を返します。もしb
またはC
が arrayJoin() 関数であれば、行は「a」条件に関係なく複製されます。
条件式
x
が指定されている場合は、transform(x, [a, ...], [b, ...], c)
関数が使用されます。そうでなければ – multiIf(a, b, ..., c)
。
式に ELSE c
節がない場合、デフォルト値は NULL
です。
transform
関数は NULL
では機能しません。
連結演算子
s1 || s2
– concat(s1, s2)
関数。
ラムダ作成演算子
x -> expr
– lambda(x, expr)
関数。
次の演算子はかっこであるため、優先順位を持ちません:
配列作成演算子
[x1, ...]
– array(x1, ...)
関数。
タプル作成演算子
(x1, x2, ...)
– tuple(x1, x2, ...)
関数。
結合性
すべての二項演算子は左結合です。たとえば、1 + 2 + 3
は plus(plus(1, 2), 3)
に変換されます。
時には、期待通りに動作しない場合があります。たとえば、SELECT 4 > 2 > 3
の結果は 0 になります。
効率のために、and
および or
関数は任意の数の引数を受け入れます。対応する AND
および OR
演算子のチェーンは、これらの関数の単一呼び出しに変換されます。
NULL
のチェック
ClickHouseは IS NULL
および IS NOT NULL
演算子をサポートしています。
IS NULL
- Nullable 型の値に対して、
IS NULL
演算子は:- 値が
NULL
の場合、1
を返します。 - それ以外の場合は
0
を返します。
- 値が
- 他の値に対して、
IS NULL
演算子は常に0
を返します。
optimize_functions_to_subcolumns 設定を有効にすることで最適化できます。optimize_functions_to_subcolumns = 1
の場合、関数は列全体のデータを読み込み処理する代わりに、null サブカラムのみを読み込みます。クエリ SELECT n IS NULL FROM table
は SELECT n.null FROM TABLE
に変換されます。
IS NOT NULL
- Nullable 型の値に対して、
IS NOT NULL
演算子は:- 値が
NULL
の場合、0
を返します。 - それ以外の場合は
1
を返します。
- 値が
- 他の値に対して、
IS NOT NULL
演算子は常に1
を返します。
optimize_functions_to_subcolumns 設定を有効にすることで最適化できます。optimize_functions_to_subcolumns = 1
の場合、関数は列全体のデータを読み込み処理する代わりに、null サブカラムのみを読み込みます。クエリ SELECT n IS NOT NULL FROM table
は SELECT NOT n.null FROM TABLE
に変換されます。