問題は解決しました
答え:
delete from `[table name]` where [row name] > AddTime( CurTime(), '14400 hour' )
これにより、OLD から 10 日以上経過したものはすべて即座に削除されます。
最初に文字列を DATETIME に変更します STR_TO_DATE
文字列 str とフォーマット文字列 format を取ります。STR_TO_DATE() はDATETIMEを返します
SELECT STR_TO_DATE('Wed Nov 21 2012', '%a %b %d %Y' )
// return 2012-11-21
次に使用しますDATEDIFF
DATEDIFF(expr1,expr2)
DATEDIFF() は、ある日付から別の日付までの日数で表されるexpr1 – expr2を返します。
SELECT DATEDIFF(CURRENT_TIMESTAMP(),STR_TO_DATE('Wed Nov 21 2012','%a %b %d %Y'))
//return 8
したがって、完全なクエリは
$sql="DELETE FROM `journal`
WHERE DATEDIFF(CURRENT_TIMESTAMP(),
STR_TO_DATE('journal_date','%a %b %d %Y')
) > 5";
注:STR_TO_DATE
関数内
月の日付部分に先行ゼロ ( 01..31 ) を付けて保存する場合は%dを使用するか、先行ゼロを付け ずに日付部分 (1..31) を保存する場合は%e
を
使用します。
cron ジョブを使用して、指定したスクリプトを実行できます
MySQL の日付/時刻関数はすべて、次の形式の MySQL DATE および DATETIME 値で機能します。
2012-11-28
2012-11-28 22:16:00
指定した形式で実際に日付を保存している場合、MySQL はそれを解析できません。
MySQL の日付/時刻関数については、http: //dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.htmlを参照してください。
どこからでも削除しjournal
ます Journal_date < date_sub(curdate(),interval 5 day)
列にインデックスを使用できますjournal_date
ただし、「datediff(now(), journal_date) > 5」は列にインデックスを使用できませんjournal_date
abs()数学関数を使用して、明らかに問題を引き起こしている負の日付の違いを無視します。
$sql="delete from `journal` where
abs(datediff(now(), STR_TO_DATE('journal_date', '%a %b %d %Y'))) > 5"
どうやら日付の順序が重要です。日付のMySQLリファレンスにdatediff()
よると、逆になっているため、おそらく負の数しか取得していません(したがって、5を超えることはないため、削除はありません)。