演算子
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 b – like(a, b)関数
notLike関数
a NOT LIKE b – notLike(a, b)関数
ilike関数
a ILIKE b – 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
Date型およびDateTime型の値との算術演算で使用されるInterval型の値を作成します。
間隔の型:
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
INTERVAL値を設定する際に文字列リテラルを使用することもできます。例えば、INTERVAL 1 HOURはINTERVAL '1 hour'またはINTERVAL '1' hourと同一です。
異なる型の間隔を組み合わせることはできません。INTERVAL 4 DAY 1 HOURのような式は使用できません。間隔は、その間隔の最小単位以下の単位で指定してください。例えば、INTERVAL 25 HOURのようにします。以下の例のように、連続した演算を使用できます。
例:
:::note
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) 関数。
ラムダ生成演算子
x -> expr – lambda(x, expr) 関数です。
以下の演算子は括弧であるため、優先順位がありません:
配列作成演算子
[x1, ...] – array(x1, ...) 関数。
タプル生成演算子
(x1, x2, ...) – tuple(x2, 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に変換されます。