SQL 案例表达式中的代码报告日期更改
Code reported date change in SQL case expression
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]
我每天下午 4 点后获取周一至周五的数据。如果报告日期是 4 点后的星期五,或者周六或周日的报告日期是星期一,有人可以帮我编写代码吗?
如果我没理解错的话,
如果收到数据且时间在 4:00 PM 之后,您需要将报告日期设为下周一,
要么
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],
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]
我每天下午 4 点后获取周一至周五的数据。如果报告日期是 4 点后的星期五,或者周六或周日的报告日期是星期一,有人可以帮我编写代码吗?
如果我没理解错的话,
如果收到数据且时间在 4:00 PM 之后,您需要将报告日期设为下周一,
要么
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],