Операторы
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 subquery
a = ANY (subquery) – Функция in(a, subquery).
функция notIn subquery
a != ANY (subquery) – То же самое, что и a NOT IN (SELECT singleValueOrNull(*) FROM subquery).
функция in subquery
a = ALL (subquery) – То же самое, что и a IN (SELECT singleValueOrNull(*) FROM subquery).
функция notIn subquery
a != ALL (subquery) – Функция notIn(a, subquery).
Примеры
Запрос с ALL:
Результат:
Запрос с ANY:
Результат:
Операторы для работы с датами и временем
EXTRACT
Извлекает части из заданной даты. Например, вы можете получить месяц из заданной даты или секунду из времени.
Параметр part указывает, какую часть даты нужно извлечь. Доступные значения:
DAY— День месяца. Возможные значения: 1–31.MONTH— Номер месяца. Возможные значения: 1–12.YEAR— Год.SECOND— Секунда. Возможные значения: 0–59.MINUTE— Минутa. Возможные значения: 0–59.HOUR— Час. Возможные значения: 0–23.
Параметр part не чувствителен к регистру.
Параметр date указывает дату или время для обработки. Поддерживаются типы Date или DateTime.
Примеры:
В следующем примере мы создаем таблицу и вставляем в нее значение с типом DateTime.
Вы можете увидеть больше примеров в тестах.
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
Логический оператор И
Синтаксис 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.