2009-11-20 52 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显然会使其解析正确。 –