MYSQL - 不正确的语法

时间:2012-12-02 22:43:24

标签: mysql stored-procedures

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

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

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

错误讯息: SQL错误(1064):您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在附近使用正确的语法  'SELECT CONCAT(FLOOR(HOUR(TIMEDIFF(end_time,start_time))/ 24,'days','at line 11

和totalTime被声明为VARCHAR(50)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为可能是这样,因为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

否则它可能不会将此单词解释为函数调用类型并抛出“保留字”错误。 (我假设END WHILE;已经在代码中的某处。) 请检查并告诉我。