Я пытаюсь использовать оператор case
, который изменит любые строки с датой, предшествующей сегодняшней дате, и вернет эти строки как значение ' '
, а затем отформатирует дату как dd/MM/yyy hh:mm
Я пытался использовать это:
CASE
WHEN AppointmentDate1 > getdate() THEN ' '
WHEN AppointmentDate1 IS NULL THEN ' '
ELSE AppointmentDate1
END AS [Appointment]
Но когда я запускаю запрос, я получаю это сообщение об ошибке:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
Как мне заставить это работать? И как потом изменить на нужный формат? (AppointmentDate1
в настоящее время в формате SQL, например, '2019-05-22 10:00:00'
)
Выражение case
возвращает одно значение. Он оценивает все предложения возврата и выбирает одно на основе приоритета. Даты имеют более высокий приоритет, чем строки, поэтому ваша ошибка связана с тем, что ' '
(пробел) не может быть преобразован в дату.
Если вы хотите, чтобы в результате была дата, используйте NULL
. В этом случае вы можете сделать:
(CASE WHEN AppointmentDate1 < getdate() THEN AppointmentDate1
END) AS Appointment
Если вам нужна строка, преобразуйте ее в строку:
(CASE WHEN AppointmentDate1 < getdate()
THEN CONVERT(VARCHAR(10), AppointmentDate1, 121)
ELSE '' -- I would just use an empty string
END) AS [Appointment]
Я выбрал стиль 121. У вас может быть другой стиль, который вам нравится. Или используйте FORMAT()
.