演算子
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
Interval型の値を作成し、DateおよびDateTime型の値と算術演算に使用します。
間隔の種類:
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
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(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に変換されます。