mysql - DECLARE 在此位置无效,需要 EOF

标签 mysql

我是 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 没有表变量。为此使用临时表。
  • 您不需要声明以 @ 开头的用户变量。 .使它们成为普通变量。
  • 要从变量中插入值,请使用 VALUES而不是 SELECT .
  • 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 ;
    

    关于mysql - DECLARE 在此位置无效,需要 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62217194/

    相关文章:

    MySQL 查询 "starts with but may not fully contain"

    mysql - 动态访问的 URL 与 CodeIgniter 中数据库中存储的 URL 不同

    mysql - WAMP 服务器不工作?

    php - SQLSTATE[42S01] : Base table or view already exists: 1050 Table 'payments' already exists (SQL: create table `payments`

    mysql - 比 65 列 Toggles 表更好的数据库设计?

    mysql - 如何以编程方式将 10 Gb 的数据上传到 MySQL 而不会像在 PHPMyAdmin 上那样崩溃?

    php - 为什么我在 PHP PDO 请求中得到 "Unexpected T_AS"?

    mysql - Xampp 无法使用我的 IP 访问 mySQL/Apache

    mysql - 识别表中的匹配记录

    php - "AND $_SESSION[' user_id '] = posted_by"不工作