我目前正在使用DATE_ADD(date,INTERVAL expr type)
将到期日期设置为mySQL数据库中的触发器。
我想知道的是,是否可以跳过周末(星期六,星期日)作为触发条件的一部分。
最佳答案
您必须为此创建一个自己的函数。例如,您可以查看如何在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
数据类型,而且我还不太清楚一个人怎么能增加一个不计算工作日的月份。关于mysql - SQL:DATE_ADD(日期,INTERVAL类型)跳过周末,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35664827/