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 中的日期格式。date_format( ) 转换格式