特定の営業日に関連付けられた優先リストがある状況で作業しています。TSQL - 休日を除く現在の営業日を追加します。
たとえば、今日の日付が2017-01-26
で、5営業日を追加する必要がある場合は、2017-02-02
が返されます。
追加された機能をいくつか混在させるには、除外する必要がある会社定休日の表があります。 5
を2017-02-16
から選択すると、米国大統領の日は2017-02-20
になり、それをスキップして5th
の営業日は2017-02-24
となります。
私は自分のニーズに適応しようとしているこれに関する別の例を見つけました。問題は、何が起こっているのか正確にはわかりません。私の追加は私が期待しているものではないということだけです。
リファレンスポスト:https://stackoverflow.com/a/12862675/2628921
ALTER FUNCTION [dbo].[findBusinessDayAfter]
(@date DATETIME, @days INT)
RETURNS DATE
AS
BEGIN
RETURN (SELECT thedate
FROM (SELECT dateadd(d, v.day, CAST (@date AS DATE)) AS thedate,
row_number() OVER (ORDER BY v.day) AS rn
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16), (17), (18), (19), (20), (21), (22), (23), (24), (25), (26), (27), (28), (29), (30), (31), (32), (33), (34), (35), (36), (37), (38), (39), (40)) AS v(day)
LEFT OUTER JOIN
holidays AS h
ON h.holidayDate = dateadd(d, v.day, CAST (@date AS DATE))
WHERE h.holidayDate IS NULL
AND LEFT(datename(dw, dateadd(d, v.day, CAST (@date AS DATE))), 1) <> 'S') AS x
WHERE @days = rn);
END
、彼らは(1) - (10)
を使用している与えられた、元の例では。しかし、私は日付に35-40
営業日を追加する必要があるケースがあるので、私はそれに応じてクエリを調整しました。
営業日に特定の日付を実行しようとすると、null
の値が返されているのですが、その理由がわかりません。
-- Multiple Holidays (Day before Thanksgiving)
SELECT dbo.findBusinessDayAfter('2017-11-05', 35) -- Returns NULL
私は私の30+
日に彼らのデフォルト10 days
を高めることができることから私を妨げる元のコードスニペットでは何が起こっているのか正確にわかりません。
これが私のユースケースに合うようにどのように適応できるかについての考えはありますか?
なぜカレンダーテーブルを作成し、このようなことをしないのですか? https://www.mssqltips。com/sqlservertip/4054/creation-date-dimension-or-calendar-table-in-sql-server / – dadde