Оператор case для удаления столбцов до сегодняшней даты

Я пытаюсь использовать оператор 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')

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Выражение 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().

Другие вопросы по теме