Операторы
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
.