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

演算子

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