mysql - 如何编写 MySQL 存储过程来添加两个日期之间的一系列记录

标签 mysql date stored-procedures

我正在尝试在 MySQL 中编写一个存储过程,它将接收两个日期。一个起始日期和一个两个日期。我以前编写过存储过程,但我不知道从哪里开始。

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

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

谢谢大家

最佳答案

这可能对你有帮助。

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 ;

关于mysql - 如何编写 MySQL 存储过程来添加两个日期之间的一系列记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47430849/

相关文章:

php - 我该如何优化以下代码?

git - 如何转储 MySQL 数据库的结构并将其导入以使用现有数据更改表?

jquery - 不明白为什么日期不受限制

c# - 获取下周日期 (C#)

mysql - 在mysql中的单个过程中插入,更新

mysql - 如何在共享cpanel sql数据库中查找服务器名称?

使用 LAST_INSERT_ID() 在多个表上批量插入 MySQL

mysql - Ruby 使用日期作为 MySQL 哈希中的键

stored-procedures - 如何在 PL/SQL 中调用带有行类型文字作为参数的过程?

.net - 在 Entity Framework 4 中使用带有额外参数的存储过程的策略