【发布时间】:2016-03-15 20:31:14
【问题描述】:
我正在创建一个查询,它将调整不包括节假日和周末的日期。
示例数据:
Adjusted Date | Adjusted Date(Excluding Holidays and weekends)
02/06/16 | 02/09/16
在我的示例中,日期是周末,调整后的日期变为 2 月 9 日,因为 2 月 8 日是假期,因此需要调整以使调整后的日期为工作日。目前,我有一个财政年度中所有周末和节假日的单独表格。
select case when (
select count(dbo.WeekendsHoliday.[Weekends & Holidays])
from dbo.WeekendsHoliday
where dbo.WeekendsHoliday.[Weekends & Holidays]
= case when convert(time, [Time Received]) > convert(time, '5:00:00 PM')
then dateadd(day, 1, [Date Received])
else [Date Received]
end
) > 0
then case (datename(DW,
case when convert(time, [Time Received]) > convert(time, '5:00:00 PM')
then dateadd(day, 1, [Date Received])
else [Date Received]
end))
when 'Saturday'
then dateadd(day, 2,
case when convert(time, [Time Received]) > convert(time, '5:00:00 PM')
then dateadd(day, 1, [Date Received])
else [Date Received]
end)
else dateadd(day, 1,
case when convert(time, [Time Received]) > convert(time, '5:00:00 PM')
then dateadd(day, 1, [Date Received])
else [Date Received]
end)
end
end as [Adjusted Date Excluding holidays and weekends]
这里发生的情况是,如果假期是连续 2 天(星期四和星期五),则调整后的日期将是星期六,但由于是周末,因此仍然无效。
调整后的日期在这里是一个别名
【问题讨论】:
-
你有周末假期餐桌吗?
-
是的,SELECT count([dbo].[WeekendsHoliday].[Weekends & Holidays] 周末和假期是字段名称..
-
你的代码格式能好一点吗?
-
CASE WHEN (SELECT count([dbo].[WeekendsHoliday].[Weekends & Holidays]) FROM [dbo].[WeekendsHoliday] WHERE [dbo].[WeekendsHoliday].[Weekends & Holidays] = AdjustedDate > 0 THEN CASE (DATENAME(DW, AdjustedDate)) WHEN 'Saturday' THEN DATEADD(DAY, 2, AdjustedDate) ELSE DATEADD(DAY, 1, AdjustedDate) END END AS [Adjusted Date Excluding holidays and weekends] -
不作为评论.. 只是编辑问题:),你能告诉我这张桌子的样子吗?
标签: sql-server date