3

问题已解决

回答:

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

这会立即删除任何早于 10 天的内容。

4

6 回答 6

2

首先在帮助下将字符串更改为 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

于 2012-11-29T06:09:41.413 回答
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 回答
1

您可以使用 cron 作业来运行指定的脚本

于 2012-11-29T09:26:06.557 回答
0

显然日期的顺序很重要。根据MySQL 对datediff()您的日期的参考是向后的,所以您可能只会得到负数(因此永远不会超过 5,所以不会删除)。

于 2012-11-29T06:09:48.633 回答
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

journalwhere journal_date < date_sub(curdate(),interval 5 day)删除

它可以在列上使用索引journal_date

但是“datediff(now(), journal_date) > 5”不能在列上使用索引journal_date

于 2012-11-29T07:40:58.490 回答