Добавление значения в столбец datetime2 вызвало переполнение

Я знаю, почему я вижу эту ошибку, потому что некоторые из моих locationDeletionDate имеют значение «9999-12-31 00:00:00.0000000», и добавление 90 дней к locationDeletionDate (как я делаю в своем запросе) вызывает ошибку в заглавие:

...WHERE                
(bpj.JobStatus = 'Live') 
AND (l.locationEffectiveDate <= SYSDATETIME()) 
AND (dateadd(d,90,l.locationDeletionDate) >= SYSDATETIME())...

Я предполагаю, что мне нужно условное CASE в моем WHERE-пункте, чтобы гарантировать, что дата не будет ошибочной, если добавятся 90 дней? Или есть более элегантный способ?


person blomster    schedule 22.07.2015    source источник
comment
Почему бы просто не добавить еще один предикат в предложение where? И l.locationDeletionDate ‹ '9999-01-01' или что-то в этом роде. Почему вы все равно используете такое смехотворно большое значение? Я думаю, что NULL будет более подходящим.   -  person Sean Lange    schedule 22.07.2015
comment
Я бы согласился с @sean, зачем вообще хранить 9999 дат?   -  person Shane_Yo    schedule 22.07.2015


Ответы (1)


Вы можете использовать этот подход для решения вашей проблемы

...WHERE                
(bpj.JobStatus = 'Live') 
AND (l.locationEffectiveDate <= SYSDATETIME()) 
AND (l.locationDeletionDate >= dateadd(d, -90, SYSDATETIME())...

В этом случае вы также решаете проблему с производительностью. Ваш предикат становится SARGable.

person Hamlet Hakobyan    schedule 22.07.2015