已解决问题
答案:
delete from `[table name]` where [row name] > AddTime( CurTime(), '14400 hour' )
这会立即删除任何超过10天旧的内容。
首先在STR_TO_DATE
的帮助下将字符串更改为DATETIME
它采用字符串str和格式化字符串格式。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
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
您可以使用cron作业来运行指定的脚本
从journal
中删除,其中journal_date<date_sub(curdate(),间隔5天)
它可以使用列journal_date
上的索引
但是"datediff(now(),journal_date)>5"不能在列journal_date
上使用索引
显然日期的顺序很重要。根据datediff()
的MySQL参考,你的日期是向后的,所以你可能只得到负数(因此永远不会超过5,所以没有删除)。
使用abs()数学函数忽略明显导致问题的负日期差异。
$sql="delete from `journal` where
abs(datediff(now(), STR_TO_DATE('journal_date', '%a %b %d %Y'))) > 5"