Сравнение равенства / неравенства SQL с обнуляемыми значениями - PullRequest
4 голосов
/ 25 марта 2009

первый дубль, решение kludge, дозорный подход (обязательно, чтобы ваша программа не позволяла вводить дозорное значение):

 select coalesce(a, -2147483648) = coalesce(b, -2147483648) as is_equal -- a little postgresism

Допустим, вы забыли заблокировать значение Sentinel в вашей программе, пользователь ввел -2147483648 в поле B, а A пусто. приведенный выше код сообщает об истинном, должен сообщать о ложном, не должен сообщать об истинном или нулевом.

Какой самый краткий способ сравнить равенство в обнуляемых полях? A == B должен просто сообщать либо true, либо false, независимо от того, являются ли поля (поля) обнуляемыми или нет.

Ответы [ 2 ]

10 голосов
/ 25 марта 2009

Возможно НЕ [ОТЛИЧНО] ОТ поможет здесь.

0 голосов
/ 25 марта 2009

Оператор <=> делает то, что вы хотите в других движках базы данных; это не в postgres? В противном случае a is null and b is null or (a is not null and b is not null and a == b) должно работать. Это работает, потому что FALSE AND NULL это FALSE.

...