【问题标题】:MYSQL -Incorrect SyntaxMYSQL - 不正确的语法
【发布时间】:2012-12-02 22:43:23
【问题描述】:
WHILE x > 1 DO
SET x = x - 1;    
SET totalTime =  SELECT CONCAT(FLOOR(HOUR(TIMEDIFF(end_time,start_time)) / 24), ' days ',

MOD(HOUR(TIMEDIFF(end_time,start_time)), 24), ' hrs ',

MINUTE(TIMEDIFF(end_time,start_time)), ' minutes ') AS total_Time

我不明白为什么会出现语法错误?

这是一个更大的过程的一部分,但指出这个 aa 是不正确的

错误信息: SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在附近使用的正确语法 'SELECT CONCAT(FLOOR(HOUR(TIMEDIFF(end_time,start_time)) / 24,'days',' 在第 11 行

totalTime 被声明为 VARCHAR(50)

【问题讨论】:

  • 对于初学者来说,没有end while;(但这可能是由于您只是引用了程序的一部分)。你得到的错误是什么?
  • 您遇到什么错误?请添加错误消息。
  • 1064 通常意味着所谓的“保留词”方面的一些错误

标签: mysql stored-procedures


【解决方案1】:

如果要设置变量的值,则不需要使用 SELECT 关键字。

SET totalTime = CONCAT(FLOOR(HOUR(TIMEDIFF(end_time,start_time)) / 24), ' days ',

MOD(HOUR(TIMEDIFF(end_time,start_time)), 24), ' hrs ',

MINUTE(TIMEDIFF(end_time,start_time)), ' minutes ');

如果你想使用SELECT关键字,那么正确的语法是:

SELECT CONCAT(FLOOR(HOUR(TIMEDIFF(end_time,start_time)) / 24), ' days ',

MOD(HOUR(TIMEDIFF(end_time,start_time)), 24), ' hrs ',

MINUTE(TIMEDIFF(end_time,start_time)), ' minutes ') INTO totalTime;

记下添加的代码INTO variable name

【讨论】:

    【解决方案2】:

    我想可能是这样,因为FLOORHOURTIMEDIFF 等需要一个环绕 SELECT 之类的:

    WHILE x > 1 DO
    SET x = x - 1;    
    SET totalTime =  SELECT CONCAT( SELECT FLOOR( SELECT HOUR( SELECT TIMEDIFF(end_time,start_time)) / 24), ' days ',
    
    SELECT MOD( SELECT HOUR( SELECT TIMEDIFF(end_time,start_time)), 24), ' hrs ',
    
    SELECT MINUTE(SELECT TIMEDIFF(end_time,start_time)), ' minutes ') AS total_Time
    

    否则它可能不会将此 Words 解释为一种函数调用并引发“保留字”错误。 (我假设 END WHILE; 已经在您的代码中。) 请检查并告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2010-12-04
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多