演算子
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
に変換されます。