Перейти к содержимому

Выражения

Выражение вычисляет значение из литералов, столбцов, параметров и вызовов функций. Оно может находиться в списке SELECT, условии или выражении записи. Глава «Синтаксис» описывает запись выражений, а «Типы данных» объясняет представление значений.

Умножение, деление и остаток имеют больший приоритет, чем сложение и вычитание. Скобки явно задают группировку.

SELECT 2 + 3 * 4 AS a, (2 + 3) * 4 AS b, 7 / 2 AS c, 7 % 2 AS d;

Результаты: 14, 20, 3 и 1. Деление этих целочисленных операндов даёт целую часть частного, а не автоматически дробное значение.

SELECT 7.0 / 2 AS fraction, 1 / 0 AS zero_result;

Результаты: 3.5 и NULL. Показанное деление на ноль возвращает NULL на проверенном движке, а не исключение. Не переносите поведение этого оператора на обработку ошибок всех числовых функций.

Сравнения имеют больший приоритет, чем AND, а AND имеет больший приоритет, чем OR. Смешанные логические условия лучше группировать скобками. Не полагайтесь на определённый порядок вычисления условий слева направо для защиты небезопасной операции: оптимизатор может выбрать другой план.

Обычное сравнение с NULL даёт неизвестный результат. IS NULL проверяет NULL непосредственно. Логические выражения используют трёхзначную логику:

SELECT NULL = NULL AS a, NULL IS NULL AS b,
TRUE AND NULL AS c, FALSE AND NULL AS d,
TRUE OR NULL AS e, NOT NULL AS f;

Результаты: NULL, true, NULL, false, true и NULL. WHERE оставляет строки, для которых условие истинно; неизвестное условие строку не выбирает.

SELECT 2 NOT IN (1, NULL) AS a, 2 BETWEEN 1 AND 3 AS b;

Первый результат равен NULL, а не true: присутствие NULL не позволяет доказать отличие значения от каждого элемента списка. BETWEEN включает обе границы, поэтому второй результат равен true. Учитывайте NULL при использовании NOT IN с данными, допускающими отсутствующие значения.

COALESCE выбирает первое значение, отличное от NULL. NULLIF возвращает NULL, когда два аргумента равны. Поисковая форма CASE выбирает результат по условиям WHEN; ELSE задаёт альтернативу.

SELECT COALESCE(NULL, 7) AS a, NULLIF(4, 4) AS b,
CASE WHEN 2 > 1 THEN 10 ELSE 20 END AS c;

Результаты: 7, NULL и 10. Осознанно выбирайте совместимые типы результатов; примеры не обещают произвольное приведение несвязанных типов.

Для конкатенации строк используйте ||. В LIKE символ % означает последовательность символов, а _ один символ. Аргументы вызова функции передаются в скобках.

SELECT 'ab' || 'cd' AS joined, 'Alpha' LIKE 'A%' AS matched,
LOWER('HELLO') AS lowered;

Результаты: abcd, true и hello. Полный справочник функции также должен описывать число аргументов, типы, обработку NULL и ошибки; здесь показано составление выражений, а не все доступные функции.

CAST запрашивает преобразование к указанному типу. Это не то же самое, что изменение формата отображения в клиенте.

SELECT CAST(42 AS TEXT) AS a, CAST(2.9 AS INTEGER) AS b,
CAST(NULL AS INTEGER) AS c;

Результаты: текст 42, целое 2 и NULL. В этом примере FLOAT преобразуется в INTEGER с отбрасыванием дробной части, а не округлением до ближайшего целого. Используйте явные преобразования, когда типы операндов делают результат неочевидным, и обрабатывайте ошибки недопустимых преобразований в приложении.