Проблема с полем даты и времени AgeCalendar

#datetime #sql-server-2012 #calendar #conditional-statements #case-when

#datetime #sql-server-2012 #Календарь #условные операторы #случай, когда

Вопрос:

Для моего поля AgingCalendar у меня есть 3 условия, в которых используется СЛУЧАЙ, КОГДА:

     CASE WHEN A.[END_DTTM] > A.[STRT_DTTM] THEN C2.[DY_OF_CAL_NUM] - C1.[DY_OF_CAL_NUM] 
         WHEN A.[END_DTTM] IS NULL and A.[STRT_DTTM] IS NOT NULL THEN C3.[DY_OF_CAL_NUM] - C1.[DY_OF_CAL_NUM]
         WHEN A.[END_DTTM] = A.[STRT_DTTM] THEN 1
    END AS AgeCalendar
  

Для моего третьего условия я пытаюсь в основном сказать, когда конечная дата-время = начальная дата-время, возраст в календарных днях должен быть установлен равным 1 календарному дню.

Однако в некоторых записях, которые я привожу, дата начала равна дате окончания, но времена, связанные с каждой датой-временем, разные. Когда это происходит, эти записи получают значение NULL в поле AgeCalendar.(Например, я мог бы 6/6/2014 0:00:00 = 6/6/2014 0:00:00, и это даст мне 1 … но если бы у меня был 6/6/2014 0:00:00 = 6/6/2014 0:03:59 ( или что-то в этом роде)…это даст мне нулевое значение, потому что оно не соответствует. Как я могу обновить приведенный выше код, чтобы я в основном говорил, когда дата окончания = дата начала, затем 1 … независимо от того, что время не совпадает?

Ответ №1:

CAST или CONVERT их как даты, чтобы игнорировать время.

WHEN CONVERT(DATE, A.[END_DTTM]) = CONVERT(DATE, A.[STRT_DTTM]) THEN 1

или

WHEN CAST(A.[END_DTTM] AS DATE) = CAST(A.[STRT_DTTM] AS DATE) THEN 1

Комментарии:

1. Я знал, что это должно быть просто, но рисовал пробел. Спасибо @scsimon.