3

問題は解決しました

答え:

delete from `[table name]` where [row name] > AddTime( CurTime(), '14400 hour' )

これにより、OLD から 10 日以上経過したものはすべて即座に削除されます。

4

6 に答える 6

2

最初に文字列を 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
を 使用します。

于 2012-11-29T06:09:41.413 に答える
1

cron ジョブを使用して、指定したスクリプトを実行できます

于 2012-11-29T09:26:06.557 に答える
1

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を参照してください。

于 2012-11-29T06:16:12.103 に答える
0

どこからでも削除しjournalます Journal_date < date_sub(curdate(),interval 5 day)

列にインデックスを使用できますjournal_date

ただし、「datediff(now(), journal_date) > 5」は列にインデックスを使用できませんjournal_date

于 2012-11-29T07:40:58.490 に答える
0

abs()数学関数を使用して、明らかに問題を引き起こしている負の日付の違いを無視します。

$sql="delete from `journal` where 
        abs(datediff(now(), STR_TO_DATE('journal_date',  '%a %b %d %Y'))) > 5"
于 2012-11-29T06:14:25.337 に答える
0

どうやら日付の順序が重要です。日付のMySQLリファレンスにdatediff()よると、逆になっているため、おそらく負の数しか取得していません(したがって、5を超えることはないため、削除はありません)。

于 2012-11-29T06:09:48.633 に答える