mysql - 使用sql计算之前的时间

标签 mysql sql

假设我有下表test,它有列idtimepost和这是它所拥有的数据的示例。

-----------------------------------
   id           time        post
-----------------------------------     
    1   2018-06-17 16:12:30 post1
    2   2018-06-17 16:13:09 post2
    3   2017-06-15 16:12:30 post7
----------------------------------

我想仅使用 SQL 打印出自每个帖子添加到数据库以来的天数、小时数、分钟数和秒数

好的,这是我的第一次尝试

SELECT
    id,
    time,
    NOW(),
    CONCAT (
    FLOOR(TIME_FORMAT(SEC_TO_TIME(NOW() - `time`), '%H') / 24),
    ' Days ',
    MOD (TIME_FORMAT(SEC_TO_TIME(NOW() - `time`), '%H'), 24),
    ' Hours ',
    TIME_FORMAT(SEC_TO_TIME(NOW() - `time`), '%i Minutes %s Seconds'),
    ' ago' 
    ) AS `ago` 
FROM
    `test`;

但它似乎没有给出正确的计算,例如上面示例的输出是

1   2018-06-17 16:12:30 2018-06-17 20:38:08 0 Days 11 Hours 49 Minutes 38 Seconds ago
2   2018-06-17 16:13:09 2018-06-17 20:38:08 0 Days 11 Hours 48 Minutes 19 Seconds ago
3   2017-06-15 16:12:30 2018-06-17 20:38:08 34 Days 22 Hours 59 Minutes 59 Seconds ago

如您所见,在 id = 3 中,打印输出时的差异应该不仅仅是 34

那么代码有什么问题吗? 〜谢谢你

最佳答案

您可以尝试此查询。通过TIMESTAMPDIFFTIMESTAMPADD函数计算间隔。

SELECT
    id,
    time,
    NOW(),
    CONCAT (
    TIMESTAMPDIFF(DAY,`time`, NOW()),' Days ',
    TIMESTAMPDIFF(HOUR, TIMESTAMPADD(DAY, TIMESTAMPDIFF(DAY, `time`, NOW()), `time`), NOW()),' Hours ',
    TIMESTAMPDIFF(MINUTE, TIMESTAMPADD(HOUR, TIMESTAMPDIFF(HOUR, `time`, NOW()), `time`), NOW()), ' Minutes ',
    TIMESTAMPDIFF(SECOND, TIMESTAMPADD(MINUTE, TIMESTAMPDIFF(MINUTE, `time`, NOW()), `time`), NOW()), ' Seconds '
    ' ago' ) AS `ago` 
FROM
    `test`;

sqlfiddle:http://sqlfiddle.com/#!9/5e8085/2

注意

例如,您想要获取 SECOND 上的 Interval

让我们一步一步来了解一下:

1.TIMESTAMPDIFF(MINUTE, time, NOW()) 获取 timeNOW() 之间的间隔 MINUTE

2.TIMESTAMPADD(MINUTE, TIMESTAMPDIFF(MINUTE, time, NOW()), time) 将 Interval MINUTE 附加到 time,让他们只有的间隔时间。

3.计算秒间隔。

关于mysql - 使用sql计算之前的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50899519/

相关文章:

c# - Linq Query Join to Subquery with In 子句

sql - 如何使用 SQL::Abstract 生成 SQL 查询?

sql - TOP Select 加 1 个号码挂起查询

php - ErrorException:间接修改重载属性 App\Answer::$attribute 无效

sql - 如何从 varchar 中删除小写字母

php - 如何替换 utf8_general_ci 上的所有无效字符

mysql - 安装zpanel后XAMPP mysql无法启动

mysql - 教义或地方给出奇怪的结果

mysql:表之间的计算

MYSQL - 获取用户最后一条消息 MAX(time)