Операторы
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
– То же самое, что а >= 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
.
Вы можете увидеть больше примеров в tests.
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
Логический И оператор
Синтаксис SELECT a AND b
— вычисляет логическое и (AND
) для a
и b
с помощью функции and.
Логический ИЛИ оператор
Синтаксис SELECT a OR b
— вычисляет логическое или (OR
) для a
и b
с помощью функции or.
Логический отрицания оператор
Синтаксис SELECT NOT a
— вычисляет логическое отрицание (NOT
) для 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
.