次の形式のタイムスタンプを格納する列timestamのテーブルがあります: "2012-12-10 21:24:30"
現在のタイムスタンプを取得し、それを列のタイムスタンプで減算して、この形式で違いを与えるSQLクエリを探しています。
「残り3時間2分」
それを行うMySQLクエリを探しています。
使用する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')
テーブル名が「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」に回答が表示されます。