mysql日期查询失败

时间:2011-07-05 10:44:49

标签: mysql sql sql-delete mysql-error-1054

我想从列中超过7200秒的表中删除行。

查询

mysql_query("delete from logged where DATE_ADD ( log, INTERVAL $this->loginDuration SECOND) < NOW()",$this->link);

其中:

name of table = logged; 
name of column = log; 
$this->loginDuration = 7200; 

The value of log in db: 2011-06-25 09:56:51.
Todays date and time [ Now() ] : 2011-07-05 11:39:02

该查询旨在删除日志值为2011-06-25 09:56:51的行,因为它早于7200秒,但却没有。

我不对的是什么?

2 个答案:

答案 0 :(得分:3)

DATE_ADD与括号之间有空格:( log, ...

使用DATE_ADD( log, ...

来自MySQL docs, Functions and Operators :

  

请注意

     

默认情况下,必须没有   函数名称和。之间的空格   跟随它的括号。这个   帮助MySQL解析器区分   函数调用和引用之间   到发生的表或列   与函数同名。   但是,功能周围的空间   允许参数。

  

你可以告诉MySQL服务器   接受函数名后面的空格   用它开始吧   --sql-mode=IGNORE_SPACE选项。 (见Section 5.1.6, “Server SQL Modes”。)   个别客户端程序可以请求   这种行为通过使用   CLIENT_IGNORE_SPACE选项   mysql_real_connect()。在任一情况下,   所有功能名称都保留   词语的

答案 1 :(得分:0)

我想告诉你我做了什么(不能将其作为评论发布)

+----------------------+
| temp.d(table.column) |
+----------------------+
| 2011-07-05 22:08:20  |
| 2011-07-05 22:08:20  |
| 2011-07-05 22:08:21  |
| 2011-07-05 22:08:21  |
| 2011-07-05 22:08:22  |
| 2011-07-05 22:08:22  |
| 2011-07-05 22:08:23  |
| 2011-07-05 22:08:23  |
| 2011-07-05 22:08:24  |
| 2011-07-05 22:08:24  |
+----------------------+

10行(0.00秒)

mysql> delete from temp where DATE_ADD(d, INTERVAL 1 SECOND) < NOW();

查询OK,10行受影响(0.01秒)