Оператор Case для удаления столбцов до сегодняшней даты - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь использовать оператор case, который изменит любые строки, у которых есть дата, предшествующая сегодняшней дате, и вернет эти строки как значение ' ', а затем отформатирует дату как dd/MM/yyy hh:mm

Я пытался использовать это:

CASE
    WHEN AppointmentDate1 > getdate() THEN ' '
    WHEN AppointmentDate1 IS NULL THEN ' '
    ELSE AppointmentDate1
END AS [Appointment]

Но когда я запускаю запрос, я получаю это сообщение об ошибке:

Сообщение 241, Уровень 16, Состояние 1, Строка 1
Преобразование не удалось при преобразовании даты и / или времени из символьной строки.

Как мне сделать эту работу?И как мне перейти на нужный формат?(AppointmentDate1 в настоящее время в формате SQL, например '2019-05-22 10:00:00')

1 Ответ

2 голосов
/ 22 мая 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...