私はあなたのソリューションを試してみましたが、より大きな間隔(例えば20日)とそれを使用するときに問題に直面しました。それは少し間隔で完全に動作します。
例: '2017-10-04' + 20日間、アルゴリズムは '2017-10-26'を返します。 4つの週末をスキップするので、 '2017-11-01'にする必要があります。
あなたが追加する日数は2週間の違いに応じて計算されませんので、あなたが追加できる最大日数は2日ですが、私の場合は8(4x2)でなければなりません。
私は私の週番号ができ得る方法が変なようだが、私は実行しているためである。この(私も変数を追加し、はるかに便利修正するために)
SELECT
@ID:='2017-10-04' as initial_date, -- the initial date in the right format to manipulate (add x day)
@DTA:=20 as days_to_add, -- number of days to add
@DA:= DATE_ADD(@ID, INTERVAL @DTA DAY) as date_add,
@LASTDAY := WEEKDAY(@DA) as last_day, -- the day (Monday, Tuesday...) corresponding to the initial date + number of days to add
@WEEK1 := DATE_FORMAT(@ID, '%v') as initial_date_week, -- format the initial date to match week mode 3 (Monday 1-53)
@WEEK2 := DATE_FORMAT(@DA, '%v') as added_date_week_nbr, -- the week # of the initial_date + number of days to add
@WEEKDIFF := @WEEK2 - @WEEK1 as week_difference, -- the difference between week 2 and week 1
DATE_ADD(@ID,
INTERVAL @DTA +
if (@WEEKDIFF > 0 or @LASTDAY in (5,6),
2,
0
) +
if (@WEEKDIFF > 1,
@WEEKDIFF*2,
0
) DAY
) AS FinalDate
で終わるようにコードを修正これは、フランスと私のDBは、週がネイティブに日曜日に開始されるように構成されているようです。「%v」は、数週間の「モード3」を表します。詳細は、MySQLのドキュメントを参照してください。https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html(ctrl + F > '%v')
私はまだ祝日を実装していませんでしたが、私は毎日の計算でX日を追加することを考えています。私たちが見ている期間に
私の(いくつかの)テストによると、これはうまくいくはずです。
http://stackoverflow.com/questions/5471524/add-business-days-to-date-in-sql-without-loopsをご覧ください。あなた自身で解決策を試すのに役立ちます。 – cnayak
5日間の追加のみを予定している場合:5営業日は1週間ですので、いつも7を追加することはありませんか? – Sam
はい、回答は柔軟です –