2012-03-26 116 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