演算子
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 (偽) を返します。
文字列を扱うオペレーター
OVERLAY
OVERLAY(string PLACING replacement FROM offset)-overlay(string, replacement, offset)関数です。OVERLAY(string PLACING replacement FROM offset FOR length)-overlay(string, replacement, offset, length)関数です。OVERLAYUTF8(string PLACING replacement FROM offset)-overlayUTF8(string, replacement, offset)関数です。OVERLAYUTF8(string PLACING replacement FROM offset FOR length)-overlayUTF8(string, replacement, offset, length)関数です。
データセットを扱う演算子
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パラメータは、どの部分を取得するかを指定します。指定可能な値は次のとおりです:
SECOND— 秒。指定可能な値: 0–59。MINUTE— 分。指定可能な値: 0–59。HOUR— 時。指定可能な値: 0–23。DAY— 月の日付。指定可能な値: 1–31。WEEK— ISO 8601 の週番号。指定可能な値: 1–53。MONTH— 月を表す番号。指定可能な値: 1–12。QUARTER— 四半期。指定可能な値: 1–4。YEAR— 年。EPOCH— Unix タイムスタンプ (1970-01-01 00:00:00 UTC からの秒数) 。注:DateTime64では、秒未満の部分は切り捨てられます。DOW— 曜日 (PostgreSQL互換) 。0 = 日曜日、6 = 土曜日。DOY— 年間通算日。指定可能な値: 1–366。ISODOW— ISO の曜日。1 = 月曜日、7 = 日曜日。ISOYEAR— ISO 8601 の週番号付け年。CENTURY— 世紀。たとえば、2024年は21世紀です。DECADE— 十年単位 (年を 10 で割った値) 。たとえば、2024年の decade は 202 です。MILLENNIUM— 千年紀。たとえば、2024年は第3千年紀です。
partパラメータは大文字小文字を区別しません。
date パラメータは処理する日付または時刻を指定します。Date、Date32、DateTime、および DateTime64 型を使用できます。
例:
以下の例では、テーブルを作成し、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 型変換関数
日付と時刻の加算
Date または Date32 の値には、+ 演算子を使って Time または Time64 の値を加算できます。結果は、指定した時刻の日付を表す DateTime または DateTime64 になります。この演算は可換です。
結果の型は、オペランドの型によって決まります。
| 左オペランド | 右オペランド | 結果の型 |
|---|---|---|
Date | Time | DateTime |
Date | Time64(s) | DateTime64(s) |
Date32 | Time | DateTime64(0) |
Date32 | Time64(s) | DateTime64(s) |
結果には session timezone が使用されます (session timezone が設定されていない場合は、サーバーのデフォルトタイムゾーンが使用されます) 。date_time_overflow_behavior 設定は、結果が表現可能な範囲を超えた場合の動作を制御します。
例:
論理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 に変換されます。
真偽値の判定
ClickHouse は、IS TRUE、IS FALSE、IS UNKNOWN、IS NOT TRUE、IS NOT FALSE、および IS NOT UNKNOWN 演算子をサポートしています。
これらは Bool および Nullable(Bool) の式で使用されます。
expr IS TRUEは、exprがtrueの場合にのみ1を返します。expr IS FALSEは、exprがfalseの場合にのみ1を返します。expr IS UNKNOWNは、exprがNULLの場合にのみ1を返します。expr IS NOT TRUEは、exprがfalseまたはNULLの場合に1を返します。expr IS NOT FALSEは、exprがtrueまたはNULLの場合に1を返します。expr IS NOT UNKNOWNは、exprがNULLではない場合に1を返します。
真偽値式では、IS UNKNOWN は IS NULL と同等であり、IS NOT UNKNOWN は IS NOT NULL と同等です。