删除超过10天的表格

时间:2012-11-29 06:04:51

标签: php mysql

问题已解决

解答:

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

这会立即删除任何超过10天OLD的内容。

6 个答案:

答案 0 :(得分:2)

首先在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(表达式1,表达式2)

     

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函数

使用%d 如果您存储日期部分与前导零(01..31)
  如果您存储没有前导零的月份部分(1..31),请使用%e

答案 1 :(得分: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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

显然日期的顺序很重要。根据{{​​3}}你的日期是倒退的,所以你可能只得到负数(因此从不超过5,所以没有删除)。

答案 4 :(得分:0)

使用abs()数学函数忽略导致问题的负日期差异。

$sql="delete from `journal` where 
        abs(datediff(now(), STR_TO_DATE('journal_date',  '%a %b %d %Y'))) > 5"

答案 5 :(得分:0)

journal删除其中的journal_date< date_sub(curdate(),间隔5天)

它可以使用列journal_date

上的索引

但" datediff(now(),journal_date)> 5"无法在列journal_date

上使用索引