首页 > 解决方案 > 如何在mysql usinf while循环中插入日期时间值

问题描述

试图datetime在 mysql 中插入值但不插入。

BEGIN
    DECLARE i datetime DEFAULT '2019-01-01 00:00:00';
    WHILE i <= '2019-07-19 13:45:00'; DO
        INSERT INTO support_data.datetime_sequence( date_time ) VALUES(i) 
           SET i = DATE_ADD(select max(date_time) from support_data.datetime_sequence,INTERVAL 1 SECOND);
    END WHILE;

收到此错误。

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在“DECLARE i datetime DEFAULT '2019-01-01 00:00:00' 附近使用的正确语法;WHILE i <= '2019-07-19 13' 在第 2 行

标签: mysqlsql

解决方案


如果这是一个存储过程,你有很多错误 1) 多余的;在做 2) 失踪之前;在插入之后 3) 没有与开始语句匹配的结束语句 4) 集合语句中的括号不正确并且您可能没有设置分隔符。这是一个有效的版本。注意我已经删除了表的 db 限定符,将间隔增加到 60 秒,并添加了 j 作为退出循环的故障保护。所有这些您都可以根据您的目的进行修改。

drop table if exists datetime_sequence;
create table datetime_sequence(date_time datetime);

drop procedure if exists p;
delimiter $$
create procedure p()
BEGIN
    DECLARE i datetime DEFAULT '2019-01-01 00:00:00';
    declare j int default 0;
    WHILE i <= '2019-07-19 13:45:00' and j < 10 DO
      INSERT INTO datetime_sequence( date_time ) VALUES(i) ;
        SET i = (select DATE_ADD((select max(date_time) from datetime_sequence),INTERVAL 60 SECOND));
        set j = j + 1;   
    END WHILE;
end $$
delimiter ;

call p();

+---------------------+
| date_time           |
+---------------------+
| 2019-01-01 00:00:00 |
| 2019-01-01 00:01:00 |
| 2019-01-01 00:02:00 |
| 2019-01-01 00:03:00 |
| 2019-01-01 00:04:00 |
| 2019-01-01 00:05:00 |
| 2019-01-01 00:06:00 |
| 2019-01-01 00:07:00 |
| 2019-01-01 00:08:00 |
| 2019-01-01 00:09:00 |
+---------------------+
10 rows in set (0.00 sec)

推荐阅读