2016-05-19 2 views
0

Я довольно новичок в SQL и задаюсь вопросом о функции датифф.Datediff NULL query

Я хотел бы вернуть все счета, где установленная дата составляет от 1 до 180 дней с даты первоначальной оплаты, которую я могу сделать в соответствии с ниже.

DATEDIFF(DD,odd.[date],sett.[date]) between 1 and 180 

Как включить все, где установленная дата может быть NULL?

Благодаря

ответ

0

Это зависит от того, как NULL значения интерпретируются, а также использование функции isnull.

Если NULL означает «сегодня», используйте

DATEDIFF(DD, isnull(odd.[date], getdate()), isnull(sett.[date], getdate()) between 1 and 180 

Если NULL означает, что «никогда не квалифицирует», использовать фиктивную дату, которая всегда будет дисквалифицировать его. Следующий должен всегда возвращает отрицательное число, если либо/или оба значения равны нулю:

DATEDIFF(DD, isnull(odd.[date], 'Dec 31, 2100'), isnull(sett.[date], 'Jan 1, 1980') between 1 and 180 

Если применяется другое значение даты, определить и установить его в качестве второго значения в соответствующем isnull.

0

Вы можете добавить, что в предложении WHERE, как следующее:

SELECT * FROM <tables join> 
WHERE DATEDIFF(DD,odd.[date],sett.[date]) between 1 and 180 
OR 
sett.[date] IS NULL 
+0

Это при условии, что вам не нужно ни в какое сравнение дат для не расчеты значений. –