Документация по PostgreSQL 9.1.1 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 9. Функции и операторы | Fast Forward | Next |
Доступны обычные операторы сравнения, которые показаны в Table 9-1.
Table 9-1. Операторы сравнения
Оператор | Описание |
---|---|
< | меньше чем |
> | больше чем |
<= | меньше или равно |
>= | больше или равно |
= | равно |
<> or != | не равно |
Note: Оператор != на этапе синтаксического разбора преобразуется в <>. Не представляется возможным реализовать разную функциональность у операторов != и <>.
Операторы сравнения доступны для всех соответствующих типов данных. Все операторы сравнения являются бинарными операторами, которые возвращают значения типа boolean; такие выражения как 1 < 2 < 3 не допустимы (потому что не существует оператора < для сравнения логического значения типа boolean с числом 3).
В дополнение к операторам сравнения, доступен специальный конструкт BETWEEN:
a BETWEEN x AND y
эквивалентно
a >= x AND a <= y
Обратите внимание, что BETWEEN считает, что конечные значения включаются в диапазон. NOT BETWEEN делает противоположное сравнение:
a NOT BETWEEN x AND y
эквивалентно
a < x OR a > y
BETWEEN SYMMETRIC — это тоже самое, что и BETWEEN, исключая, что данное выражение не требует, чтобы аргумент слева от AND был меньше или равен аргументу справа. Если это не так, то два аргумента автоматически меняются местами, так что всегда получается непустой диапазон.
Чтобв проверить является ли какое-либо значение NULL или не-NULL, используются конструкты:
выражение IS NULL выражение IS NOT NULL
или эквивалентные им, но нестандартные конструкты:
выражение ISNULL выражение NOTNULL
Не пишите expression = NULL, потому что NULL не "равен" NULL. (Значение NULL считается неизвестной величиной, а два неизвестных значения не могут быть равны). Это соответствует стандарту SQL.
Tip: Некоторые приложения могут ожидать, что выражение = NULL вовзращает истину, если выражение даёт значение NULL. Очень рекомендуется, чтобы такие приложения были изменены, чтобы соответствовать стандарту SQL. Однако, если это невозможно, то есть переменная transform_null_equals. Если она включена, PostgreSQL будет преобразовывать предложения вида x = NULL в x IS NULL.
Note: Если выражение является значением-строкой таблицы, то IS NULL является истиной, когда само это выражение является NULL или когда все поля в этой строке таблицы имеют значение NULL, в то время как IS NOT NULL будет истиной, когда само выражение является не-NULL и когда все поля в этой строке таблицы будут иметь значение не-NULL. В результате такого поведения для выражений, которые являются значением-строкой таблицы IS NULL и IS NOT NULL не всегда возвращают противоположные результаты, например, выражение, которое является строкой таблицы, содержащей в своих полях как значения NULL так и не-NULL, будет возвращать ложь в обоих случаях. Это соответствует стандарту SQL и устраняет несоответствующее стандарту поведение версий PostgreSQL предшествующих 8.2.
Обычные операторы сравнения считают значение NULL (означающее "неизвестно"), не истиной и не ложью, если одно из сравниваемых значений является NULL. Например, выражение 7 = NULL возвращает NULL. Когда такое поведение не подходит, используйте конструкты IS [ NOT ] DISTINCT FROM:
выражение IS DISTINCT FROM выражение выражение IS NOT DISTINCT FROM выражение
Если сравниваемые значение не-NULL, конструкт IS DISTINCT FROM выполняется точно также как и оператор <>. Однако, если оба сравниваемых значения являются NULL, он возвращает ложь, а если NULL является только одним из сравниваемых значений, он возвращает истину. Похожим образом, конструкт IS NOT DISTINCT FROM идентичнен оператору = если оба сравниваемых значения не-NULL, но он возвращает истину, если оба сравниваемых значения являются NULL и ложь, если только одно из этих значений NULL. Таким образом, эти конструкты эффективно выполняют работают с NULL как с обычными данными, а не как со значением "неизвестно".
Значения типа boolean могут также сравниваться с помощью конструктов:
expression IS TRUE expression IS NOT TRUE expression IS FALSE expression IS NOT FALSE expression IS UNKNOWN expression IS NOT UNKNOWN
Они будут всегда возвращать истину или ложь и никогда значение NULL, даже когда операнд имеет значение NULL. NULL считается логическим значением "неизвестно". Обратите внимание, что IS UNKNOWN и IS NOT UNKNOWN в действительности являются тем же самым, что и соответственно IS NULL и IS NOT NULL, за исключением того, что значение операнда должно иметь тип boolean.