22

我有一个带有列时间戳的表,它存储具有以下格式的时间戳:“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 回答