A 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()
.