0

これを行う方法を検索して検索しましたが、非常に限られた情報しか見つかりませんでした。

double(25,8) 形式のフィールド「ttime」を含む MySQL テーブル「msgdb」があります (例の行 = 1352899856.95249200)。

フィールド「ttime」が<=今日の日付-5日である行を削除して、テーブルを定期的にクリーンアップする必要があります。

これらは、double から time への変換に関連して見つけることができた唯一の 2 行のコードですが、どちらも機能させることができません。

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 で保存する場合は、これを使用UTC_TIMESTAMP()することをお勧めします。これが唯一の適切な方法です。

于 2012-11-15T05:06:14.543 に答える