2012-03-26 5 views
1

私はレコードのタイムスタンプを保存するカラムを持っていますが、データベースからX日前のレコードを削除したいのですが、デフォルト値が "0000-00-00"のレコードは削除したくありません00: 00:00」mysqlタイムスタンプで古いレコードを選択する

最初にレコードを選択するためにこのクエリを試しましたが、ほとんどすべてのレコードとレコードもデフォルトのvauleで選択しています。

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

+0

申し訳ありません。私はすべてのレコードを最初に選択するためにSELECTを使用しているだけなので、表示されています。 – user969068

答えて

3

サンプルクエリでは、日付フィールドとして列の代わりにリテラルを使用しています。

明確にするために、 'Accestime'は 'Accestime'と同じではありません。ひとつはバッククォート、もう一つは一重引用符を使用するので、基本的にはリテラル文字列を使って日付データと比較しています。また、より60日以上前に未満の日付を選択することをお勧めします。

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

ティックを使用しないでください。ティックを使用しないでください! 私は自分のキャリアで多くのSQLを実行しますが、ダニを使用する必要はありませんでした。だから、私は非常に多くのSQL Serverは現在のダニが必要であることを疑う。

ダニを使用しているため問題が発生しています。実際には、二重引用符を使用して、ダニや一重引用符のエラーが発生する可能性のある状況を無視しないでください。

私はこれが必要ではないことを知っていますが、良い習慣は時間と頭痛を節約します。

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

アドバイスをいただきありがとうございます。 – user969068

関連する問題