我不知道其他國家,但在南非,如果週日是公共假期,我們週一有公共假期。我需要編寫一個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
感謝您的反饋 –