Я столкнулся с этой проблемой, когда следующий запрос не работает должным образом:
select 1 where getdate()<>null
мы ожидаем, что он покажет 1, потому что getdate () не возвращает ноль.
Я предполагаю, что это как-то связано с тем, что SQL не может преобразовать null в datetime и пропустить строку!
Конечно, мы знаем, что мы должны использовать ключевые слова IS или IS NOT для сравнения переменной с нулевым значением, но при сравнении двух параметров становится трудно справиться с нулевой ситуацией.
В качестве решения вы можете создать свою собственную функцию сравнения, например:
CREATE FUNCTION [dbo].[fnCompareDates]
(
@DateTime1 datetime,
@DateTime2 datetime
)
RETURNS bit
AS
BEGIN
if (@DateTime1 is null and @DateTime2 is null) return 1;
if (@DateTime1 = @DateTime2) return 1;
return 0
END
и переписать запрос как:
select 1 where dbo.fnCompareDates(getdate(),null)=0