这个MySQL查询的日期语法有什么问题?

时间:2014-11-03 08:36:35

标签: mysql

phpMyAdmin告诉我,以下代码片段在语法上是不正确的:

 SET @time := NOW();
 SET @timeset :=0;


 IF @timeset=1 
    THEN SET @time := DATE_ADD(@time,INTERVAL 10 SECOND);
    ELSE SET @time := DATE_SUB(NOW(),INTERVAL 1 DAY);
         SET @timeset := 1; 
    END IF; 

但我没看到它有什么问题。

确切的错误消息为:enter image description here

更新:感谢wolfgangalther的回答,我找到了以下解决方法:

SET @time := NOW();
SET @timeset :=0;
SET @time=IF(@timeset=1,DATE_ADD(@time,INTERVAL 10 SECOND),DATE_SUB(NOW(),INTERVAL 1 DAY)); 
SET @timeset:=1; 

2 个答案:

答案 0 :(得分:3)

来自MySQL manual

  

MySQL支持IF,CASE,ITERATE,LEAVE LOOP,WHILE和REPEAT结构,用于存储程序中的流控制

您不得自行发布IF构造!

这里也有一个简短的讨论(包括一些替代方案): https://dba.stackexchange.com/questions/80132/using-if-statement-outside-of-a-stored-procedure-or-function

注意:在那个地方has been requested as a feature in the past使用IF语句,但截至目前尚未在MySQL中实现。

修改
存储的程序是存储过程或存储的函数。存储函数与存储过程相同,它们只返回一个值。

阅读有关存储过程的更多信息:

答案 1 :(得分:0)

这种IF ELSE只能在存储过程中使用,但您可以在查询中使用If条件,如下所示。

IF(expr,if_true_expr,if_false_expr)


实施例

SELECT customerNumber,
       customerName,
       IF(state IS NULL,'N/A',state) state,
       country
FROM customers;