Вам нужно будет создать собственную функцию для этого. Вы можете посмотреть, как это сделать в this answer, например (просто используйте function
вместо procedure
). Что касается того, как написать такую функцию, рабочий алгоритм here. Код довольно прост: он проходит через дни и пропускает выходные.
CREATE FUNCTION `DAYSADDNOWK`(addDate DATE, numDays INT) RETURNS date
BEGIN
IF (WEEKDAY(addDate)=5) THEN
SET addDate=DATE_ADD(addDate, INTERVAL 1 DAY);
END IF;
IF (WEEKDAY(addDate)=6) THEN
SET addDate=DATE_ADD(addDate, INTERVAL 1 DAY);
END IF;
WHILE numDays>0 DO
SET addDate=DATE_ADD(addDate, INTERVAL 1 DAY);
IF (WEEKDAY(addDate)=5) THEN
SET addDate=DATE_ADD(addDate, INTERVAL 1 DAY);
END IF;
IF (WEEKDAY(addDate)=6) THEN
SET addDate=DATE_ADD(addDate, INTERVAL 1 DAY);
END IF;
SET numDays=numDays-1;
END WHILE;
RETURN addDate;
END
В настоящее время SELECT DAYSADDNOWK(CURDATE(), 5)
дает 2016-03-07
, что является правильным.
Конечно только вы не можете использовать его с дней, поэтому никаких произвольных interval
, но ваш вопрос упомянутый date
тип данных, и я не совсем понимаю, как можно было бы добавить в месяц, не считая рабочих дней.
Чтобы уточнить, вы хотите изменить 'DATE_ADD (некоторый четверг, INTERVAL 3 DAY)', чтобы он был равен следующему вторнику? –
Да, это правильно – Danielphillips