0

我已经搜索并搜索了执行此操作的方法,但发现的信息非常有限。

我有一个 MySQL 表“msgdb”,其中包含一个格式为 double(25,8) 的字段“ttime”(示例行 = 1352899856.95249200)。

我需要通过删除字段“ttime”<=今天的日期-5天的任何行来定期清理表格。

这些是我能找到的与双时间转换相关的仅有的两行代码,但其中任何一个都无法工作。

SELECT ADDDATE(ADDDATE(ADDDATE('1899-12-31 00:00:00',FLOOR(ttime)), INTERVAL -1 DAY),INTERVAL(MOD(ttime,1)*86400)SECOND) AS TrueDate FROM msgdb

select date('1899-12-31 00:00:00'+ INTERVAL ttime * 24*3600 SECOND) as date from msgdb

在我开始使用 DELETE FROM 以确保我得到正确的结果之前,我首先尝试使用下面的代码显示任何符合条件的行。

 $query = "select date('1899-12-31 00:00:00'+ INTERVAL ttime * 24*3600 SECOND) as date from msgdb";
 $result = mysql_db_query ($dbname, $query, $link);
 while($row = mysql_fetch_array($result)) {
   echo $row['date'];
   echo '<br>';
 }

并且

 $query = "SELECT ADDDATE(ADDDATE(ADDDATE('1899-12-31 00:00:00',FLOOR(ttime)), INTERVAL -1 DAY),INTERVAL(MOD(ttime,1)*86400)SECOND) AS TrueDate FROM msgdb";
 $result = mysql_db_query ($dbname, $query, $link);
 while($row = mysql_fetch_array($result)) {
   echo $row['TrueDate'];
   echo '<br>';
 }

但两者都没有返回。

更新:好的,通过使用此代码:

$query = "select ttime from msgdb";
$result = mysql_db_query ($dbname, $query, $link);
while($row = mysql_fetch_array($result)) {
        echo date('m-j-Y, H:i:s', $row[0]);
    echo '<br>';
}

我可以看到它将 'ttime' 字段从 1352899856.95249200 的存储值转换为 11-14-2012, 07:30:56。

那么我将如何从表中删除 ttime <=now - 5 天的所有行?

4

1 回答 1

1

找出哪些记录的日期早于某个时间点应该很容易:

DELETE FROM table WHERE ttime <= DATE_SUB(NOW(), INTERVAL 5 DAY);

UTC_TIMESTAMP()如果您将所有时间都存储在 UTC 中,那么使用它可能会更好,这是唯一明智的方法。

于 2012-11-15T05:06:14.543 回答