我搜索并搜索了方法,但发现信息非常有限。
我有一个MySQL表'msgdb',其中包含一个字段'ttime',格式为double(25,8)(例如row = 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所在的行&lt; = now - 5天?
答案 0 :(得分:1)
确定哪些记录在某个时间点之前有一个日期应该很容易:
DELETE FROM table WHERE ttime <= DATE_SUB(NOW(), INTERVAL 5 DAY);
如果您将所有时间都存储在UTC中,那么使用UTC_TIMESTAMP()
也可能更好,这是唯一理智的方式。