Для использования в предложении WHERE вы должны тестировать отдельно
where dbo.assignments.[end] is null or dbo.assignments.[end] < GetDate()
или вы можете превратить нули в дату (это всегда будет верно)
where isnull(dbo.assignments.[end],0) < GetDate()
или вы можете выполнить отрицательный тест по битовому флагу, полученному из приведенного ниже
where case when dbo.assignments.[end] < GetDate() then 0 else 1 end = 1
Ниже приведено объяснение и способ получения isInPast для предложения SELECT.
bool isInPast = (x! = Null? X
bool может иметь только один из двух результатов, true или false.
При внимательном рассмотрении ваших критериев условие ONLY для - это когда
x! = Null && x
Учитывая этот факт, он становится простым переводом, учитывая, что в SQL x < now
может оцениваться только при x!=null
, поэтому требуется только одно условие
isInPast = case when dbo.assignments.[end] < { fn NOW() } then 0 else 1 end
(1 - истина, а 0 - ложь)
Не уверен, что представляет { fn NOW() }
, но если вы хотите, чтобы SQL Server предоставлял текущее время, используйте либо GETDATE (), либо, если вы работаете с данными UTC, используйте GETUTCDATE ()
isInPast = case when dbo.assignments.[end] < GetDate() then 0 else 1 end