提问者:小点点

声明在此位置无效,应为EOF


我是一个SQL新手,我试图在我预先指定的2个日期内生成日期。 我正在使用下面的代码,但我在MySQL工作台中得到一个错误,声明“声明在此位置无效”。 我做错了什么?

DELIMITER $$
CREATE PROCEDURE proc()
BEGIN

DECLARE @dates TABLE(dt datetime)    
DECLARE @dateFrom datetime
DECLARE @dateTo datetime

SET @dateFrom = '2001/01/01'
SET @dateTo = '2001/01/12'


WHILE(@dateFrom < @dateTo)
BEGIN
   SELECT @dateFrom = DATEADD(day, 1,@dateFrom)
   INSERT INTO @dates 
   SELECT @dateFrom
END
END$$

DELIMITER ;

共1个答案

匿名用户

语法错误是因为您忘记了每个语句后面的

还有其他问题:

  1. MySQL没有表变量。 为此使用临时表。
  2. 您不需要声明以@开头的用户变量。 使它们成为普通变量。
  3. 若要插入变量中的值,请使用values而不是select
  4. dateadd不是MySQL函数。 它具有date_add,但语法与您使用的语法不同。
DELIMITER $$
CREATE PROCEDURE proc()
BEGIN

DECLARE dateFrom datetime;
DECLARE dateTo datetime;

SET dateFrom = '2001-01-01';
SET dateTo = '2001-01-12';

CREATE TEMPORARY TABLE dates (
    dt datetime
);

WHILE(dateFrom < dateTo)
BEGIN
   SET dateFrom = DATE_ADD(dateFrom, INTERVAL 1 DAY);
   INSERT INTO dates VALUES (dateFrom);
END WHILE;
END$$

DELIMITER ;

相关问题