Документация Firebird → Документация по Firebird → 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 → Документация по Firebird → NULL в СУБД Firebird → Проверка на NULL |