メインコンテンツまでスキップ
メインコンテンツまでスキップ

演算子

ClickHouseは、クエリの解析段階で、優先度、優先順位、および結合性に従って演算子を対応する関数に変換します。

アクセス演算子

a[N] – 配列の要素へのアクセス。arrayElement(a, N)関数。

a.N – タプル要素へのアクセス。tupleElement(a, N)関数。

数値否定演算子

-anegate(a)関数。

タプル否定については: tupleNegate

乗算および除算演算子

a * bmultiply(a, b)関数。

タプルを数値で乗算する場合: tupleMultiplyByNumber、スカラー積の場合: dotProduct

a / bdivide(a, b)関数。

タプルを数値で除算する場合: tupleDivideByNumber

a % bmodulo(a, b)関数。

加算および減算演算子

a + bplus(a, b)関数。

タプルの加算: tuplePlus

a - bminus(a, b)関数。

タプルの減算: tupleMinus

比較演算子

equals関数

a = bequals(a, b)関数。

a == bequals(a, b)関数。

notEquals関数

a != bnotEquals(a, b)関数。

a <> bnotEquals(a, b)関数。

lessOrEquals関数

a <= blessOrEquals(a, b)関数。

greaterOrEquals関数

a >= bgreaterOrEquals(a, b)関数。

less関数

a < bless(a, b)関数。

greater関数

a > bgreater(a, b)関数。

like関数

a LIKE slike(a, b)関数。

notLike関数

a NOT LIKE snotLike(a, b)関数。

ilike関数

a ILIKE silike(a, b)関数。

BETWEEN関数

a BETWEEN b AND ca >= b AND a <= cと同じ。

a NOT BETWEEN b AND ca < b OR a > cと同じ。

データセット操作のための演算子

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サブクエリ関数

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 HOURINTERVAL '1 hour'INTERVAL '1' hourと同じです。

ヒント

異なるタイプのインターバルを組み合わせることはできません。「INTERVAL 4 DAY 1 HOUR」のような式は使用できません。最小単位のインターバルの単位と同じかそれ以下の単位でインターバルを指定してください。たとえば、INTERVAL 25 HOURとしてください。以下の例のように、連続した演算を使用できます。

例:

注記

INTERVALの構文またはaddDays関数が常に推奨されます。単純な加算や減算(たとえば、now() + ...のような構文)は、時間設定を考慮しません。たとえば、夏時間などです。

例:

参照

論理AND演算子

構文 SELECT a AND babの論理的連言を計算します。関数はand

論理OR演算子

構文 SELECT a OR babの論理的選言を計算します。関数はor

論理否定演算子

構文 SELECT NOT aaの論理否定を計算します。関数はnot

条件演算子

a ? b : cif(a, b, c)関数。

注:

条件演算子は、bとcの値を計算し、その後条件aが満たされているかどうかを確認し、対応する値を返します。bまたはCarrayJoin()関数の場合、各行が「a」条件にかかわらず複製されます。

条件式

xが指定されている場合は、transform(x, [a, ...], [b, ...], c)関数が使用されます。そうでない場合は、multiIf(a, b, ..., c)が使用されます。

式にELSE c句がない場合、デフォルト値はNULLです。

transform関数はNULLでは機能しません。

連結演算子

s1 || s2concat(s1, s2)関数。

ラムダ生成演算子

x -> exprlambda(x, expr)関数。

以下の演算子は、優先度を持たないため、括弧です:

配列生成演算子

[x1, ...]array(x1, ...)関数。

タプル生成演算子

(x1, x2, ...)tuple(x1, x2, ...)関数。

結合性

すべての二項演算子は左結合性を持っています。たとえば、1 + 2 + 3plus(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 tableSELECT 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 tableSELECT NOT n.null FROM TABLEに変換されます。