如何编写MySQL存储过程以在两个日期之间添加一系列记录

时间:2017-11-22 09:20:19

标签: mysql date stored-procedures

我试图在MySQL中编写一个将收到两个日期的存储过程。 A从约会和两个约会。我以前写了存储过程,但是我很难知道从哪里开始。

如何对存储过程进行编码,当收到20170101和20170110时,它会将以下内容添加到表中 20170101 20170102 20170103 20170104 20170105 20170106 20170107 20170108 20170109 20170110

我不想简单地为每个值添加一个,因为它们是日期,20170132在现实中并不存在。

谢谢大家

1 个答案:

答案 0 :(得分:0)

这可能会对你有帮助。

CREATE TABLE IF NOT EXISTS table_name (field_name VARCHAR(255)); 

DELIMITER $$

USE `test`$$

DROP PROCEDURE IF EXISTS `test1`$$

CREATE PROCEDURE `test1`(
    IN pi_date_from     DATE,
    IN pi_date_to       DATE
    )
    READS SQL DATA
BEGIN
    SET @countRecordToAdd   = 0;
    SET @i          = 0;
    SET @query      = 'INSERT INTO table_name (field_name) VALUES ';

    SELECT
        DATEDIFF(pi_date_to, pi_date_from)
    INTO
        @countRecordToAdd
    ;

    IF @countRecordToAdd > 0
    THEN
        label1: LOOP
            SET @query  = CONCAT(
                            @query,
                            " (date_add(\"", pi_date_from, "\", INTERVAL ", @i, " DAY)),"
                        );
            SET @i = @i + 1;
            IF @i <= @countRecordToAdd THEN ITERATE label1;END IF;

            LEAVE label1;

        END LOOP label1;

        PREPARE stmt    FROM TRIM(TRAILING ',' FROM @query);
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
    END$$
DELIMITER ;