#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.