Firebird Documentation Index → NULL в СУБД Firebird → Проверка на NULL |
В свете того, какой беспорядок может навести
NULL
, вы часто захотите узнать, является ли что-либо
NULL
прежде, чем вы будете
использовать это в выражении. Для некоторых очевидная проверка должна
выглядеть так:
if (A =
NULL
) then...
И в самом деле, есть системы управления базами данных, которые
поддерживают такой синтаксис проверки на NULL
. Но
стандарт SQL не допускает этого, не допускает этого и СУБД Firebird. В
версиях до 2.0 такой синтаксис был даже недопустим. С версии 2.0 он
разрешается, но сравнение всегда вернет NULL
,
независимо от состояния и значения A. Поэтому такой тест на
NULL
является бесполезным - нам нужен явный результат
true
или false
.
Корректный способ проверки на NULL
такой:
...is null
/...is not null
Эта проверка всегда вернет true
или
false
- и никакой неразберихи. Примеры:
if (MyField is null) then...
select * from Pupils where PhoneNumber is not null
select * from Pupils where not (PhoneNumber is null) /* делает то же самое, что и предыдущий пример */
update Numbers set Total = A + B + C where A + B + C is not null
Можно сказать, что в то время как равенство «=
» (когда используется
как оператор равенства) может сравнивать значения, «is
» проверяет
состояние.
Firebird Documentation Index → NULL в СУБД Firebird → Проверка на NULL |