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