В SQL невозможно сравнить переменную с NULL следующим образом:
CASE x WHEN NULL THEN y ELSE z END
потому что с трехзначной логикой SQL x = NULL
не будет никогда возвращать true. Вместо этого нужно сделать это:
CASE WHEN x IS NULL THEN y ELSE z END
Это проблематично, когда x является результатом процедуры, которая изменяет данные, например:
CASE WHEN func(i) IS NULL THEN y
WHEN func(i) = 'a' THEN z
ELSE t
END
Итак ... func(i)
будет оцениваться дважды? Почему не существует стандартного требования, согласно которому CASE ... WHEN NULL
сравнивает вычисленное выражение с NULL
с оператором IS NULL
?
Существуют ли СУБД, которые допускают такую конструкцию?