Перейти к основному содержимому
Перейти к основному содержимому

Операторы

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 и 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.

Вы можете увидеть больше примеров в тестах.

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(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 возвращает:
    • 1, если значение равно NULL.
    • 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 возвращает:
    • 0, если значение равно NULL.
    • 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.