22

次の形式のタイムスタンプを格納する列timestamのテーブルがあります: "2012-12-10 21:24:30"

現在のタイムスタンプを取得し、それを列のタイムスタンプで減算して、この形式で違いを与えるSQLクエリを探しています。

「残り3時間2分」

それを行うMySQLクエリを探しています。

4

2 に答える 2

39

使用するTIMESTAMPDIFF

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

ここで、unit引数は、MICROSECOND(マイクロ秒)、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、またはYEARのいずれかの値である必要があります。

私のアプローチ:単位をSECONDに設定してから、 SEC_TO_TIME を使用します

SELECT SEC_TO_TIME(TIMESTAMPDIFF(SECOND,`table`.`time_column`,CURRENT_TIMESTAMP()))

// will return in hh:mm:ii format

アップデート

48時間未満の場合は、「はい」を返しますか?HourDifferenceそれ以外の場合はありません

SELECT IF(TIMESTAMPDIFF(HOUR,`time_column`,CURRENT_TIMESTAMP())< 48  ,'yes','no')
于 2012-12-11T04:35:21.823 に答える
4

テーブル名が「testtable」であると想定します

テーブル作成クエリを以下に示します

CREATE TABLE `testtable` (
    `id` INT(2) NOT NULL AUTO_INCREMENT,
    `period` TIMESTAMP NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)

クエリをテストするためにいくつかのデータを挿入します。いくつかのデータを挿入するためのクエリを以下に示します

INSERT INTO `testtable` (`id`, `period`) VALUES
    (1, '2012-12-10 17:21:09'),
    (2, '2012-11-06 18:21:12'),
    (3, '2012-12-06 18:21:18'),
    (4, '2012-12-06 19:21:24'),
    (5, '2012-12-06 18:21:27');

次のクエリを実行して、答えを取得します

SELECT *, 
       CONCAT(HOUR(difftime), ' hours ', MINUTE(difftime), ' Minutes ', 
       SECOND(difftime), ' seconds remaining') AS timetaken 
FROM   (SELECT *, 
               SEC_TO_TIME(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP( 
               ttable.period)) AS 
                      diffTime 
        FROM   testtable ttable) AS temptable1 

出力を以下に示します

ここに画像の説明を入力してください

列「timetaken」に回答が表示されます。

于 2012-12-11T04:54:50.530 に答える