Код сообщает об изменении даты в выражении SQL case - PullRequest
0 голосов
/ 05 августа 2020
CASE  
   WHEN CAST([SYS_Created_On] as time) >= CAST('16:00' as time) 
      THEN DATEADD(dd, 1, CAST([SYS_Created_On] AS DATE))
      ELSE CAST([SYS_Created_On] AS DATE)  
END AS [Reported Date],
CASE 
   WHEN CAST([resolved_at] as time) >= CAST('16:00' as time) 
      THEN DATEADD(dd, 1, AS([resolved_at] AS DATE)) 
      ELSE CAST([resolved_at] AS DATE) 
END AS [Resolved Date]

Я получаю данные с понедельника по пятницу каждый день после 16:00. Может ли кто-нибудь помочь мне, как это закодировать, если заявленная дата - пятница после 4 или суббота или воскресенье, если заявленная дата - понедельник.

введите описание изображения здесь

1 Ответ

1 голос
/ 06 августа 2020

Если я вас правильно понял, вам необходимо указать дату, в которой сообщается, как наступающий понедельник, в случае, если данные получены и время после 16:00, или SYS_Created_On - это суббота или воскресенье вам нужно чтобы получить дату, соответствующую понедельнику

Хотя есть разные способы, которые более элегантны (в том смысле, что меньший код), следующий более наглядный:

CASE  
    WHEN CAST([SYS_Created_On] as time) >= CAST('16:00' as time) and DATENAME(WEEKDAY,CAST([SYS_Created_On] AS DATE)) = 'Friday' 
      THEN DATEADD(dd, 3, CAST([SYS_Created_On] AS DATE))
    WHEN DATENAME(WEEKDAY,CAST([SYS_Created_On] AS DATE)) = 'Saturday' 
      THEN DATEADD(dd, 2, CAST([SYS_Created_On] AS DATE))
    WHEN DATENAME(WEEKDAY,CAST([SYS_Created_On] AS DATE)) = 'Sunday' 
      THEN DATEADD(dd, 1, CAST([SYS_Created_On] AS DATE))
    WHEN CAST([SYS_Created_On] as time) >= CAST('16:00' as time) 
      THEN DATEADD(dd, 1, CAST([SYS_Created_On] AS DATE))
      ELSE CAST([SYS_Created_On] AS DATE)  
END AS [Reported Date],
...