我目前正在使用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/

10-11 04:43