я попробовать свои решения, но столкнулся с проблемой при использовании его с большим интервалом (например 20 дней). Он работает отлично с небольшими интервалами.
Пример: для '2017-10-04' + 20 дней ваш алгоритм возвращает '2017-10-26'. Это должно быть «2017-11-01», так как мы пропускаем 4 выходных.
Количество добавленных дней не рассчитывается в зависимости от разницы между 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
так, как я получу неделю число может кажется странным, но это потому, что я бегу это во Франции и моей БД, кажется, настроены таким образом, что недели начинаются с воскресенья, «% v» представляет собой «режим 3» в течение нескольких недель, вы можете проверить документацию по MySQL здесь для получения более подробной информации: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html (ctrl + F > '% v')
Я еще не реализовал праздничный день, но я подумываю о добавлении X дней в расчет каждый раз в один из этих дней i в период, на который мы смотрим.
Согласно моим (нескольким) испытаниям, это должно работать. Дайте мне знать, если не
Посетите http://stackoverflow.com/questions/5471524/add-business-days-to-date-in-sql-without-loops, это поможет вам самостоятельно разобраться с вашим решением. – cnayak
Если вы планируете использовать это только для добавления 5 дней: разве вы всегда будете добавлять 7, потому что 5 рабочих дней - одна рабочая неделя? – Sam
Да, но принятый ответ является гибким –