演算子
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) 関数を表します。
lessOrEquals関数
a >= b – greaterOrEquals(a, b) 関数です。
greaterOrEquals関数
a < b – less(a, b) 関数。
less関数
a > b – less(a, b) 関数。
like関数
a LIKE b – like(a, b) 関数です。
notLike 関数
a LIKE b – like(a, b)関数
notLike関数
a NOT LIKE b – notLike(a, b)関数。
ilike関数
a BETWEEN b AND c – a >= b AND a <= c と同じ意味です。
a NOT BETWEEN b AND c – a < b OR a > c と同じ意味です。
is not distinct from 演算子 (<=>)
バージョン 25.10 以降では、<=> を他の演算子と同様に使用できます。
バージョン 25.10 より前では、次の例のように JOIN 式の中でのみ使用できました。
<=> 演算子は NULL セーフな等価比較演算子であり、IS NOT DISTINCT FROM と同等です。
通常の等価演算子(=)と同様に動作しますが、NULL 値を互いに比較可能なものとして扱います。
2 つの NULL 値は等しいと見なされ、NULL と NULL 以外の値を比較した場合は、NULL ではなく 0(偽)を返します。
データセットを扱う演算子
IN 演算子およびEXISTS 演算子を参照してください。
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 subquery 関数
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
Date 型および DateTime 型の値との算術演算で使用するための Interval 型の値を作成します。
使用できる interval の種類:
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
INTERVAL の値を設定する際には、文字列リテラルも使用できます。たとえば、INTERVAL 1 HOUR は INTERVAL '1 hour' や INTERVAL '1' hour と同じ意味になります。
異なる型の interval は組み合わせられません。INTERVAL 4 DAY 1 HOUR のような式は使用できません。INTERVAL 25 HOUR のように、その interval の最小単位と同じか、それより小さい単位で指定してください。以下の例のように、演算を続けて適用することができます。
例:
INTERVAL 構文または addDays 関数の使用を常に推奨します。単純な加算や減算(now() + ... のような構文)は、サマータイムなどの時間関連の設定を考慮しません。
例:
関連項目
- Interval データ型
- toInterval 型変換関数
論理AND演算子
構文 SELECT a AND b — 関数 and を用いて、a と b の論理積を計算します。
論理OR演算子
構文 SELECT a OR b — 関数 or を使用して、a と b の論理和を計算します。
論理否定演算子
構文 SELECT NOT a — 関数 not により、a の論理否定を計算します。
条件演算子
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) 関数。
Lambda 作成演算子
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 演算子の連なりは、これらの関数の 1 回の呼び出しに変換されます。
NULL のチェック
ClickHouse は IS NULL および IS NOT NULL 演算子をサポートします。
IS NULL
- Nullable 型の値に対しては、
IS NULL演算子は次の値を返します。- 値が
NULLの場合は1 - それ以外の場合は
0
- 値が
- Nullable 以外の値に対しては、
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 SETTING を有効にすることで最適化できます。optimize_functions_to_subcolumns = 1 の場合、関数はカラム全体のデータを読み取って処理するのではなく、null サブカラムのみを読み込みます。クエリ SELECT n IS NOT NULL FROM table は SELECT NOT n.null FROM TABLE に変換されます。