我不知道其他国家,但在南非,如果周日是公共假期,我们周一有公共假期。我需要编写一个Update语句,它会在x天后返回日期,如果日期是公共假期后的星期一,它应该增加一天。我简单的更新语句如下:周日公共假期
UPDATE tbl_ProjectTracker
set Predicted_Date = DATEADD(DAY, 20, Actual_Eng_Start_date)
我已经有一个参照表,但我不知道我是否应该确定在桌子上或UPDATE语句增加一天。 请协助
我不知道其他国家,但在南非,如果周日是公共假期,我们周一有公共假期。我需要编写一个Update语句,它会在x天后返回日期,如果日期是公共假期后的星期一,它应该增加一天。我简单的更新语句如下:周日公共假期
UPDATE tbl_ProjectTracker
set Predicted_Date = DATEADD(DAY, 20, Actual_Eng_Start_date)
我已经有一个参照表,但我不知道我是否应该确定在桌子上或UPDATE语句增加一天。 请协助
你应该有一个PublicHoliday
表 然后,你可以更新predicted_date这样
DECLARE @PublicHoliday AS TABLE
(
HolidayDate date
)
DECLARE @NumberDaysPredict int = 20
UPDATE pt
set pt.Predicted_Date = DATEADD(DAY, @NumberDaysPredict + hl.NumberHolidaysOnSunday, pt.Actual_Eng_Start_date)
FROM tbl_ProjectTracker pt
CROSS APPLY
(
SELECT Count(*) AS NumberHolidaysOnSunday
FROM @PublicHoliday ph
WHERE ph.HolidayDate BETWEEN pt.Actual_Eng_Start_date AND DATEADD(DAY, @NumberDaysPredict, Actual_Eng_Start_date)
AND Datepart(dw,ph.HolidayDate) = 1 -- Sunday
) hl
一个简单的方法将是一个情况下构建的天数:
UPDATE tbl_ProjectTracker
set Predicted_Date = DATEADD(
DAY,
CASE WHEN Actual_Eng_Start_date IN
(select day from public_holidays where datepart(dw, day) = 1) THEN 21 ELSE 20 END,
Actual_Eng_Start_date)
不幸的是SQL Server的日期/时间功能弱,至少可以说。 DATEPART(dw, ...)
的结果取决于设置(DATEFIRST
),所以查询有点不可靠。运行时务必确保设置正确。已请求扩展DATEPART
以接受DATEFIRST
的可选参数,这样您就可以获得一致的查询,但Microsoft已将其关闭为“无法解析”(https://connect.microsoft.com/SQLServer/feedbackdetail/view/432303/datepart-dw-date-should-allow-optional-date-first-Parameter)。
我从一个日历表中得到的两个意见。第一个视图是WorkingDays,我过滤了公共假期,第二个视图是相反的,将其命名为Public_Weekends。我试图做的是查询必须从'tbl_ProjectTracker'查找日期,在WorkingDays视图中查找日期,并将x天添加到日期,并将日历中的新日期带入tbl_ProjectTracker表。如果还有其他方法,请提出建议。谢谢 –
你可以'交叉申请'到工作日,并获得第n天'按工作日顺序' – TriV
感谢您的反馈 –