MySQL日期时间的天,小时和分钟数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL日期时间的天,小时和分钟数相关的知识,希望对你有一定的参考价值。

我需要以天,小时和分钟为单位的两个日期之间的差。当前日期(NOW())和end_date。我需要在两个单独的查询中使用它们,它们的工作方式略有不同。

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

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

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

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

我对此有一个解决方案,但这太可怕了。我确信有人至少找到了一种相对干净的解决方法。提前谢谢!

答案

之前的一个不准确,与应该有一个小时的时间相差一天零三个小时。

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

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;

解释:

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

我使用了几年,几个月和几天,但是可以对其进行编辑以包括更多内容:

concat(timestampdiff(YEAR,'2020-01-01 11:00:00','2020-04-04 13:22:45'), ' years, ',
       timestampdiff(MONTH,'2020-01-01 11:00:00','2020-04-04 13:22:45' - INTERVAL timestampdiff(YEAR,'2020-01-01 11:00:00','2020-04-04 13:22:45') YEAR),' months, ',
       timestampdiff(DAY,'2020-01-01 11:00:00','2020-04-04 13:22:45' - INTERVAL timestampdiff(YEAR,'2020-01-01 11:00:00','2020-04-04 13:22:45') YEAR - INTERVAL timestampdiff(MONTH,'2020-01-01 11:00:00','2020-04-04 13:22:45' - INTERVAL timestampdiff(YEAR,'2020-01-01 11:00:00','2020-04-04 13:22:45') YEAR) MONTH),' days'),

以上是关于MySQL日期时间的天,小时和分钟数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL DataType--日期格式

mysql 中的日期格式。date_format( ) 转换格式

MySQL使用DATE_FORMAT()函数格式化日期

MySql之DATE_FROMAT函数

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数