MySQL datetime 以天、小时和分钟为单位的差异

标签 mysql datetime

我需要两个日期之间的天数、小时数和分钟数的差值。当前日期 (NOW()) 和结束日期。我在两个不同的查询中需要它们,它们的工作方式略有不同。

第一个需要以下列格式将它们作为单列返回:

-------------------------
|       time_left       |
-------------------------
| x days x hours x min  |
-------------------------

第二个需要在三个单独的列中返回它们,如果 end_date 已经超过当前日期,请确保它为每一列返回 0:

-------------------------------------------
|  days_left  |   hrs_left  |   min_left  |
-------------------------------------------
|      x      |      x      |      x      |
-------------------------------------------

我有一个解决所有这些问题的方法,但它太糟糕了。我敢肯定有人至少找到了一种相对干净的方法来解决这个问题。先谢谢了!

最佳答案

之前的那个是不准确的,显示了一天和 3 小时的差异,应该是一个小时。

这个在任何时候都应该是准确的

SELECT 
    @diff:=ABS( UNIX_TIMESTAMP("2014-05-09 21:24:25") - UNIX_TIMESTAMP() ) , 
    CAST(@days := IF(@diff/86400 >= 1, floor(@diff / 86400 ),0) AS SIGNED) as days, 
    CAST(@hours := IF(@diff/3600 >= 1, floor((@diff:=@diff-@days*86400) / 3600),0) AS SIGNED) as hours, 
    CAST(@minutes := IF(@diff/60 >= 1, floor((@diff:=@diff-@hours*3600) / 60),0) AS SIGNED) as minutes, 
    CAST(@diff-@minutes*60 AS SIGNED) as seconds;

解释:

  • 首先我们计算绝对差值(以秒为单位)并将其放入变量
  • 然后我们检查我们是否获得了每个(天小时分钟)中的一个或多个,如果是,我们计算我们获得了多少并将其放入一个变量中
  • 对于最大之后的单位,我们做同样的事情,但首先我们从整体差异中减去分配给前一个单位的秒数
  • 最后我们把剩下的作为最小单位,秒

关于MySQL datetime 以天、小时和分钟为单位的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23567111/

相关文章:

mysql - 尝试从 Symfony2 中的数据库获取列总和时出错

mysql - Laravel 中包含 insert into 和 where 子查询的复杂插入查询

c# - 使用C#+MySql数据库使用Web Service的困惑

c - 如何在 UNIX 上使用 C 日期和时间函数?

MySQL DATETIME 使用虚拟日期表排序

php - SQL语法;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法

python-3.x - 无法使用 `datetime` 从 Python `datetime64` 对象的可迭代对象转换为 Numpy `fromiter()` 对象的数组。漏洞?

datetime - 如何为 Progress 4GL 查询中的每个循环添加日期条件?

python - 如何在 SQLAlchemy 中仅比较日期时间的日期?

mysql - 我如何更新层次结构连接表