MySQL时间戳差异

23

我有一个表,其中有一列“timestam”,它以“2012-12-10 21:24:30”这种格式存储时间戳。

我正在寻找一种SQL查询,该查询将当前时间戳减去列中的时间戳,并以以下格式显示差异:

“剩余3小时2分钟”

寻找一个可以实现此功能的MySQL查询。

2个回答

41

使用TIMESTAMPDIFF函数。

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

其中的unit参数应为以下值之一: MICROSECOND(微秒)、SECOND(秒)、MINUTE(分钟)、HOUR(小时)、DAY(天)、WEEK(周)、MONTH(月)、QUARTER(季度)或YEAR(年)。

我的方法:将unit设置为SECOND,然后使用SEC_TO_TIME函数。

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

// will return in hh:mm:ii format

更新

如果HourDifference小于48小时,则返回,否则返回

SELECT IF(TIMESTAMPDIFF(HOUR,`time_column`,CURRENT_TIMESTAMP())< 48  ,'yes','no')

我该如何获取当前时间戳?将其放入“datetime_expr2”中...是NOW()吗? - Sohel Mansuri
好的,我让它工作了...SELECT TIMESTAMPDIFF(HOUR, users_codes.timestam, NOW()) AS HourDifference FROM users_codes如果HourDifference小于48小时,我该怎么返回“是”?如果不是,则返回“否”? - Sohel Mansuri
非常感谢你,希望其他人也能从中学习 :) - Sohel Mansuri
不好意思一直追问这个问题...我怎样才能返回只有'yes'的行? - Sohel Mansuri
将其放入 WHERE TIMESTAMPDIFF(...) < 48 中。 - xkeshav
我不确定你的意思是什么。 - Sohel Mansuri

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 

下面是输出结果: enter image description here 列“timetaken”将显示答案。

感谢您的帮助。我更喜欢第一个解决方案;然而,其他人可能会发现您的解决方案有用。再次感谢。 - Sohel Mansuri
+1是为了UNIX_TIMESTAMP(),但我认为UNIX_TIMESTAMP(now()) === CURRENT_TIMESTAMP() - xkeshav
@diEcho - 谢谢。我认为UNIX_TIMESTAMP(now()) != CURRENT_TIMESTAMP()。无论如何,我还是给你点赞,因为这是一个好答案。 - Fathah Rehman P
UNIX_TIMESTAMP(now()): 1441912971 ... UNIX_TIMESTAMP(): 1441912971 ... CURRENT_TIMESTAMP(): 2015-09-10 12:22:51 ... NOW(): 2015-09-10 12:22:51 - Rick James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接