Операторы
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 b – Функция like(a, b).
Функция notLike
a NOT LIKE b – функция notLike(a, b).
Функция ilike
a ILIKE b – Функция 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.
оператор IS NOT DISTINCT FROM (<=>)
Начиная с версии 25.10 вы можете использовать <=> так же, как и любой другой оператор.
До версии 25.10 его можно было использовать только в выражениях JOIN, например:
Оператор <=> — оператор проверки равенства с учетом NULL, эквивалентный IS NOT DISTINCT FROM.
Он работает как обычный оператор равенства (=), но рассматривает значения NULL как сравнимые между собой.
Два значения NULL считаются равными, а сравнение NULL с любым ненулевым (non-NULL) значением возвращает 0 (ложь), а не NULL.
:::
Операторы для работы с наборами данных
См. операторы 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.
Типы интервалов:
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
Вы также можете использовать строковый литерал при задании значения 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.
Оператор логического ИЛИ
Синтаксис 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возвращает: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.