DECLARE在此位置无效,期望EOF

问题描述 投票:0回答:1

我是SQL的新手,我试图在我指定的2个日期之内生成日期。我正在使用下面的代码,但在MySQL工作台中收到一条错误消息,指出“ DECLARE在此位置无效” ...我在做什么错?

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 ;
mysql
1个回答
0
投票

语法错误是因为您在每个语句后都忘记了;

还有其他问题:

  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 ;
© www.soinside.com 2019 - 2024. All rights reserved.