2012-03-26 115 views
1

我有我保存记录时间戳的列,我想从我的数据库中删除X天较旧的记录,但我不想删除默认值为“0000-00-00 00: 00:00“mysql时间戳选择较旧的记录

我试过这个查询来首先选择记录,但它也选择了几乎所有的记录和记录以及默认值。

SELECT * FROM `file` WHERE 'Accestime' != '0000-00-00 00:00:00' AND 'Accestime' < TIMESTAMPADD(DAY,-60,NOW()) 

请问有人能指导我做错了吗?

感谢您的任何帮助。

+0

因此,Accestime ='0000-00-00 00:00:00'的记录在此查询中被删除? – Teja 2012-03-26 17:54:14

+0

对不起,我只是使用SELECT来首先选择所有记录,所以是他们也被显示。 – user969068 2012-03-26 17:54:49

回答

3

在您的示例查询中,您正在使用文字而不是列作为日期字段。

为了澄清,'Accestime'和'Accestime'不一样。注意一个使用反引号,另一个使用单引号,所以基本上你使用的是字符串并将其与日期数据进行比较。另外,我想你的意思是选择日期是小于 60天前,不大于。尝试更类似于:

SELECT * FROM `file` WHERE `Accestime` != '0000-00-00 00:00:00' AND `Accestime` < TIMESTAMPADD(DAY,-60,NOW()) 
2

为了避免混淆刻度和单引号 - STOP使用TICKS !!! 我在我的职业生涯中做了很多的sql,我从来没有需要使用蜱。所以我非常怀疑任何sql服务器都需要当前的tick。

由于您正在使用刻度,因此存在问题。如果事实上,为什么不使用双引号并忽略可能出现的蜱和单引号的错误情况。

我知道这不是必要的,但良好的习惯可以节省时间和头痛。

DELETE * FROM file WHERE Accestime != "0000-00-00 00:00:00" 
AND Accestime < TIMESTAMPADD(DAY,-60,NOW()) 
+0

感谢您的建议..工作 – user969068 2012-03-26 18:32:33