Как сравнить DATEDIFF с заданным количеством дней в операторе case, находящемся в средстве просмотра отчетов

Мне нужно получить конкретный вывод для столбца в наборе отчетов на основе погоды или даты, когда Uf_RequestedShipDate просрочен на 60 или более дней при запуске отчета.

До сих пор я пробовал Cast и Convert, раньше я просто пытался сравнить вывод DATEDIFF с 60, но я продолжаю получать ту же ошибку.

, CASE
    WHEN co.Uf_RequestedShipDate = NULL THEN NULL
    WHEN CONVERT(INT, DATEDIFF(day, co.Uf_RequestedShipDate, GETDATE())) <= CAST(60 AS INT) /*DATEADD(DAY, -60, @Today)*/ THEN co.Uf_RequestedShipDate + '****'
    WHEN CONVERT(INT, DATEDIFF(day, co.Uf_RequestedShipDate, GETDATE())) > CAST(60 AS INT) /*DATEADD(DAY, -60, @Today)*/ THEN 'Pending ****'
    END AS 'RequestedShipDate'

Мне просто нужно вывести дату с **** или в ожидании с ****, если в базе данных есть значение, если прошло более 60 дней после этой даты, оно будет в ожидании, а если нет, то оно все равно должно отображаться Дата.

Примеры: У меня есть одна запись с датой 2019-03-30 в этом столбце, она отправит 2019-03-30 **** в отчет.

Если бы был один, у которого было бы 2018-10-31, то в отчете было бы просто написано «Ожидание ****».

Если бы для строки он был нулевым, то он все равно был бы просто нулевым, а не **** для отчета.

Примеры данных и желаемые результаты действительно помогут.

Gordon Linoff 08.04.2019 19:11

Я помещаю пример в резюме, чтобы лучше объяснить, что я пытаюсь сделать.

Alex Scholtes 08.04.2019 19:17

Какая у вас ошибка? Какой тип данных у Uf_RequestedShipDate?

Alan Schofield 08.04.2019 19:51

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

Alex Scholtes 08.04.2019 21:02
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы не можете сравнивать NULL с =, вы должны использовать IS NULL.
Вам не нужно преобразовывать результат DATEDIFF() в целое число, потому что оно целое, как и 60.
Последнее условие: > 60 нужно просто проверить с ELSE частью в CASE утверждении.
Попробуй это:

CASE
  WHEN co.Uf_RequestedShipDate IS NULL THEN NULL
  WHEN DATEDIFF(day, co.Uf_RequestedShipDate, GETDATE()) <= 60 
    THEN CONVERT(VARCHAR, co.Uf_RequestedShipDate, 120) + '****'
  ELSE 'Pending ****'
END AS RequestedShipDate

Это сделало это, я ценю помощь.

Alex Scholtes 08.04.2019 21:08

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