2009-11-20 95 views
1

當我使用此查詢:不一致的MySQL DATEDIFF行爲

SELECT COUNT(*) FROM `my_table` WHERE DATEDIFF(NOW(), updated) > 2 

MySQL的執行沒有錯誤的查詢,我得到那些未在最後2天更新的行數。但是,如果我改變這樣的查詢:

SELECT * FROM `my_table` WHERE DATEDIFF(NOW(), updated) > 2 

我得到以下錯誤:

#1305 - FUNCTION mydatabase.DATEDIFF does not exist 

任何想法,爲什麼會這樣?

回答

2

我有一個類似的問題,它不會在SELECT上工作,如果我沒有設置限制。

試着這樣做:

SELECT * FROM `my_table` WHERE DATEDIFF(NOW(), updated) > 2 LIMIT 0, 10 

上一個MySQL更新它得到了糾正。嘗試更新你的MySQL版本。

+1

有趣的是,phpMyAdmin在執行查詢之前添加了一個LIMIT子句,失敗了。如果我自己將LIMIT添加到查詢中,就像你所建議的那樣,查詢執行得很好。必須是phpMyAdmin版本2.6.4-pl3中的錯誤。謝謝您的幫助。 – Geoff

3

確認您沒有在DATEDIFF與括號(之間的空格。

也許你也可以嘗試SET sql_mode = "IGNORE_SPACE";

還要檢查這個bugreport

+0

感謝您的回覆。當我使用phpMyAdmin輸入查詢時,我絕對沒有空間。但是,它可能是phpMyAdmin在執行之前修改查詢。作爲一個實驗,我在本地主機上嘗試了更新版本的phpMyAdmin(3.1.3.1),它執行問題查詢就好了。在我的生產服務器(由第三方託管)上,phpMyAdmin版本爲2.6.4-pl3。在我的生產服務器上,phpMyAdmin是執行臨時查詢的唯一手段,因爲我沒有直接的mysql shell訪問權限。 – Geoff

+0

那麼你可以讓某些phpMyAdmin不會改變查詢字符串,並通過將sql_mode設置爲'「IGNORE_SPACE」'來增加空格。如果這不能像Frankie和bugreport中的人員所建議的那樣,那麼添加LIMIT顯然會使其解析正確。 –