我有一个列,我保存记录的时间戳,我想从我的数据库删除X天旧记录,但我不想删除默认值为“0000-00-00 00:00:00”的记录< / p>
我尝试了这个查询,首先选择记录,但它也选择了几乎所有记录和默认值的记录。
SELECT * FROM `file` WHERE 'Accestime' != '0000-00-00 00:00:00' AND 'Accestime' < TIMESTAMPADD(DAY,-60,NOW())
请有人指导我上面做错了吗?
感谢您的帮助。
答案 0 :(得分:3)
在示例查询中,您使用文字而不是列作为日期字段。
澄清一下,'Accestime'与'Accestime``不同。注意一个使用反引号,另一个使用单引号,所以基本上你使用文字字符串并将它与日期数据进行比较。此外,我认为您的意思是选择60天前小于的日期,不大于。尝试更像这样的东西:
SELECT * FROM `file` WHERE `Accestime` != '0000-00-00 00:00:00' AND `Accestime` < TIMESTAMPADD(DAY,-60,NOW())
答案 1 :(得分:2)
为避免混淆蜱和单引号 - 停止使用蜱虫! 我在职业生涯中做了很多sql,我从来不需要使用刻度线。所以我非常怀疑任何sql server目前都需要滴答声。
因为你正在使用刻度线而遇到问题。事实上,为什么不使用双引号并忽略滴答声和单引号的错误可能情况。
我知道这不是必要的,但是好习惯可以节省时间和头痛。
DELETE * FROM file WHERE Accestime != "0000-00-00 00:00:00"
AND Accestime < TIMESTAMPADD(DAY,-60,NOW())