Операторы доступа
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 с любым значением, отличным от NULL, возвращает 0 (false), а не NULL.
Операторы для работы со строками
OVERLAY
OVERLAY(string PLACING replacement FROM offset)- функцияoverlay(string, replacement, offset).OVERLAY(string PLACING replacement FROM offset FOR length)- функцияoverlay(string, replacement, offset, length).OVERLAYUTF8(string PLACING replacement FROM offset)- функцияoverlayUTF8(string, replacement, offset).OVERLAYUTF8(string PLACING replacement FROM offset FOR length)- функцияoverlayUTF8(string, replacement, offset, length).
Операторы для работы с наборами данных
функция 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:
Query
Response
Query
Response
Операторы для работы с датами и временем
EXTRACT
part указывает, какую часть даты нужно извлечь. Доступны следующие значения:
SECOND— Секунда. Возможные значения: 0–59.MINUTE— Минута. Возможные значения: 0–59.HOUR— Час. Возможные значения: 0–23.DAY— День месяца. Возможные значения: 1–31.WEEK— Номер недели по ISO 8601. Возможные значения: 1–53.MONTH— Номер месяца. Возможные значения: 1–12.QUARTER— Квартал. Возможные значения: 1–4.YEAR— Год.EPOCH— Unix-временная метка (секунды с 1970-01-01 00:00:00 UTC). Примечание: дляDateTime64дробная часть секунды отбрасывается.DOW— День недели (совместимо с PostgreSQL). 0 = воскресенье, 6 = суббота.DOY— День года. Возможные значения: 1–366.ISODOW— День недели по ISO. 1 = понедельник, 7 = воскресенье.ISOYEAR— Год нумерации недель по ISO 8601.CENTURY— Век. Например, 2024 год относится к XXI веку.DECADE— Десятилетие (год, делённый на 10). Например, для 2024 года десятилетие равно 202.MILLENNIUM— Тысячелетие. Например, 2024 год относится к III тысячелетию.
part регистронезависимый.
Параметр date задаёт дату или время для обработки. Поддерживаются типы Date, Date32, DateTime и DateTime64.
Примеры:
DateTime.
INTERVAL
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
INTERVAL также можно использовать строковый литерал. Например, INTERVAL 1 HOUR эквивалентно INTERVAL '1 hour' или INTERVAL '1' hour.
Примеры:
Синтаксис
INTERVAL или функция addDays всегда предпочтительнее. Простое сложение или вычитание (например, выражение вида now() + ...) не учитывает настройки времени, например переход на летнее время.- тип данных Interval
- функции преобразования типов toInterval
Сложение даты и времени
+. В результате получается DateTime или DateTime64, представляющий дату с указанным временем суток. Эта операция коммутативна.
Тип результата зависит от типов операндов:
| Левый операнд | Правый операнд | Тип результата |
|---|---|---|
Date | Time | DateTime |
Date | Time64(s) | DateTime64(s) |
Date32 | Time | DateTime64(0) |
Date32 | Time64(s) | DateTime64(s) |
В результате используется часовой пояс сеанса (или часовой пояс сервера по умолчанию, если часовой пояс сеанса не задан). Настройка
date_time_overflow_behavior определяет, что произойдет, если результат выйдет за пределы представимого диапазона.Оператор логического 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).
Следующие операторы не имеют приоритета, поскольку это скобки:
Оператор создания Array
[x1, ...] – Функция array(x1, ...).
Оператор создания Tuple
(x1, x2, ...) — функция tuple(x2, x2, ...).
Ассоциативность
1 + 2 + 3 преобразуется в plus(plus(1, 2), 3).
Иногда результат оказывается не таким, как вы ожидаете. Например, SELECT 4 > 2 > 3 вернёт 0.
Для повышения эффективности функции and и or принимают произвольное число аргументов. Соответствующие цепочки операторов AND и OR преобразуются в один вызов этих функций.
Проверка на NULL
IS NULL и IS NOT NULL.
IS NULL
- Для значений типа Nullable оператор
IS NULLвозвращает:1, если значение равноNULL.0в противном случае.
- Для всех остальных значений оператор
IS NULLвсегда возвращает0.
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 = 1 функция читает только подстолбец null вместо чтения и обработки всех данных столбца. Запрос SELECT n IS NOT NULL FROM table преобразуется в SELECT NOT n.null FROM TABLE.