2014-11-03 35 views
1

phpMyAdmin的告诉我,下面的代码片段是语法不正确:这个MySQL查询日期的语法有什么问题?

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

UPDATE:感谢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; 
+0

有:'timeset'和'time'申报? – hjpotter92 2014-11-03 08:43:34

+0

@ hjpotter92我已经想到了。所以是的,他们被宣布;我只是放大了我的代码片段以显示 – 2014-11-03 08:49:50

+0

根据您最近的问题,我们更喜欢代码和错误消息作为文本提供。这里的代码很好,但错误是截图。只需将它从浏览器复制到剪贴板,然后将其发布到您的问题中即可。 – halfer 2014-12-29 13:21:11

回答

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作为现在。

编辑:
存储程序要么存储过程或存储功能。存储函数与存储过程是一样的,它们只是返回一个值。

了解更多关于存储过程:

+0

我为我的新手无知道歉,我不知道在这种情况下“存储的程序/功能”是什么? – 2014-11-03 09:13:19

+0

不需要道歉 - 我更新了我的回答:) – wolfgangwalther 2014-11-03 09:21:41

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;