2014-11-03 37 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;