MySQL无法将月份添加到月份结束的日期

时间:2016-06-22 23:11:53

标签: mysql date stored-procedures

我正在尝试从日期( pfecha 输入)开始经过若干天( pplazo 输入)的最终日期,并避免计算表格中列出的某些日期( feriado )。

到目前为止,这就是我所使用的存储过程:

输入参数:

pfecha - DATE

pplazo - INT(11)

PROC:BEGIN

DECLARE i INT(1);

START TRANSACTION;

SET i=1;

lazo:LOOP
    IF NOT EXISTS (SELECT * FROM feriados WHERE feriado=pfecha+i)
        THEN
        SET pfecha=pfecha+1;
        SET i=i+1;
    END IF;

    IF i=pplazo
        THEN
        LEAVE lazo;
    END IF;
END LOOP lazo;

COMMIT;

SELECT pfecha as respuesta;

END

问题是,当计算的日期使日期过去到月底时,那么" respuesta "转向0000-00-00 这不应该发生,如果我从2016-04-20开始输入15天,那么结果日期应该是2016-05-5。

你能发现我的错误吗?你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

向日期添加天数的正确方法是使用DATE_ADDADDATE函数,而不是+运算符。见

lazo:LOOP
    IF NOT EXISTS (SELECT * FROM feriados WHERE feriado=DATE_ADD(pfecha, INTERVAL i DAY))
        THEN
        SET pfecha=DATE_ADD(pfecha, INTERVAL 1 DAY);
        SET i=i+1;
    END IF;

    IF i=pplazo
        THEN
        LEAVE lazo;
    END IF;
END LOOP lazo;