MySQL语法错误|变量=变量+整数

时间:2017-09-20 11:10:39

标签: mysql syntax

您好我已经编写了这个MySQL存储过程并且我一直收到此语法错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@start := @start + 3600;

END WHILE;

@start = 1505469600;
' at line 42

这是我的存储过程,由于语法错误,我还没有能够运行它,所以可能有一些问题。如果您发现任何问题,如果您可以帮助我,那将非常有用。

DELIMITER ;;

CREATE PROCEDURE insert_zone_time_range_data()

BEGIN

SET @start = 1505469600, @end = 1505483940;

WHILE @start < @end DO

    WHILE @start < @end DO

        INSERT INTO daily_stats_zone_visitors_time_range
        (
            day_epoch,
            day_of_week,
            time_range_hours,
            venue_id,
            visitors,
            visitors_new
        )
        SELECT UNIX_TIMESTAMP(FROM_UNIXTIME(ts,'%Y-%m-%d')) AS day_epoch,
        FROM_UNIXTIME(ts,'%W') AS day_of_week,
        FROM_UNIXTIME(@start, '%h') + '-' + FROM_UNIXTIME(@end, '%h') AS time_range_hours,
        venue_id,
        COUNT(DISTINCT mac) AS visitors,
        COUNT(id) AS visitors_new
        FROM (              
            SELECT probe_request.venue_id,
            probe_request.mac,
            macs.id,
            probe_request.ts
            FROM probe_request
            LEFT OUTER JOIN daily_stats_venue_mac_cache AS macs
            ON probe_request.mac = macs.mac
            AND probe_request.venue_id = macs.venue_id
            AND macs.first_seen BETWEEN @start AND @end
            WHERE probe_request.ts BETWEEN @start AND @end
            GROUP BY probe_request.venue_id, probe_request.mac
        ) AS temp
        GROUP BY venue_id;

        @start = @start + 3600;

    END WHILE;

    @start = 1505469600;
    @end = @end - 3600;

END WHILE;

END;
;;

我将DELIMITER ;;添加到我的脚本顶部,因为我在设置变量时遇到了语法错误,这似乎解决了这个问题。说实话,我不知道为什么,但这一点似乎现在有效。

如果您因为错误而感到遗憾,我没有任何结果。感谢您的帮助。非常感谢

2 个答案:

答案 0 :(得分:4)

要将值设置为变量,您必须使用Set关键字。

这里将是

   set @start = @start + 3600

答案 1 :(得分:0)

关于user-defined variables的MySQL文档说:

  

设置用户定义变量的一种方法是发出SET语句:

SET @var_name = expr [, @var_name = expr] ...
     

对于SET=:=可以用作赋值运算符。

     

您还可以在SET以外的语句中为用户变量赋值。在这种情况下,赋值运算符必须是:=而不是=,因为后者在非SET语句中被视为比较运算符=

mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;

该行:

@start = @start + 3600;

不是有效的MySQL语句(即使使用:=而不是=,它也无效)。在此上下文中为变量@start赋值的正确方法是使用SET语句:

SET @start = @start + 3600;

其他两项任务相同:

SET @start = 1505469600;
SET @end = @end - 3600;