while循环添加日期的MYSQL程序
Posted
技术标签:
【中文标题】while循环添加日期的MYSQL程序【英文标题】:MYSQL Procedure for while loop to add date 【发布时间】:2021-08-26 18:35:14 【问题描述】:我正在 mysql 中创建一个表,需要在 2000-01-01 00:00:00 到 2020-01-01 00:00:00 之间添加 3 小时间隔的递增日期。
我创建了一个表 my_table,主键为 time_key。 我做了这个过程来创建一个while循环来将日期插入到表中。
mysql> CREATE PROCEDURE loop_date()
-> BEGIN
-> SET @dateStart DEFAULT '2021-01-01 03:00:00';
-> WHILE (dateStart < '2020-01-01 00:00:00') DO
-> INSERT INTO my_table(time_key) VALUES (dateStart);
-> set dateStart = dateStart + INTERVAL 3 HOUR;
-> END WHILE;
-> END;
-> //
-> DELIMITER;
-> CALL loop_date();
我在字段列表中收到错误 1054 unknown column 'dateStart'
【问题讨论】:
您能发布您遇到的错误吗? 我发现问题出在使用声明并将其更改为设置。但是现在我已经改变了,我在字段列表中收到一个新错误 ERROR 1053 unknown column 'dateStart' 【参考方案1】:我注意到的第一个问题是 dateStart 需要在 DECLARE 语句中具有数据类型。在这种情况下,它应该是 DATETIME。 dateStart 也大于 while 语句中的值。所以while循环永远不会执行。
试试这个:
DELIMITER //
CREATE PROCEDURE loop_date()
BEGIN
DECLARE dateStart DATETIME DEFAULT '2019-01-01 03:00:00';
WHILE (dateStart < '2020-01-01 00:00:00') DO
INSERT INTO my_table(time_key) VALUES (dateStart);
SET dateStart = dateStart + INTERVAL 3 HOUR;
END WHILE;
END //
DELIMITER ;
CALL loop_date();
对我来说,1 年的差异需要 9.57 秒。
更新:这是对您的原始问题的回应,该问题已更改。
【讨论】:
谢谢,这解决了我的问题,我的意思是把默认年份设置为 2000 年。运行了 1 分 30 秒!以上是关于while循环添加日期的MYSQL程序的主要内容,如果未能解决你的问题,请参考以下文章