2012-12-02 39 views
1

如果我有一个开始时间和结束时间,并且我找到了总时间,如果超过24小时,我希望它而不是显示26,显示1天和2个小时。如何才能做到这一点?如何将小时转换为天 - MYSQL

+0

你们是不是要做到这一点SQL的一面呢? – bear

回答

2

你可能想要做的

IF (MOD(HOUR(TIME)/24)) > 24, 
    SELECT CONCAT(
    FLOOR(HOUR(TIME)/24), ' days ', 
    MOD(HOUR(TIME), 24), ' hours ', 
    MINUTE(TIME), ' minutes') 
) 

随着Timediff

FLOOR(HOUR(TIMEDIFF('2010-01-06 08:46', '2010-01-01 12:30'))/24), ' days ', 
+0

就像一个魅力,谢谢。 – user1854392

+0

没问题,记得接受答案,如果它是正确的:) – bear

+0

我无法得到这个工作。 MySQL 5.6。 mod函数使用逗号(,)分隔符而不是(/)。 IF没有ELSE条款。 – dlink

0

如果您start_timeend_time然后DateTime类型使用TIMEDIFF功能和应用所需的DATE_FORMAT。

例如

select DATE_FORMAT(TIMEDIFF('2012:01:01 00:00:00', '2012:01:01 00:00:00.000001'), 
        '%d: %H: %m'); 
0

这为我工作:

select 
    o.id, 
    o.created, 
    o.complete_date, 
    concat(timestampdiff(day, o.created, o.complete_date), 
      'd ', 
      lpad(
      mod(timestampdiff(hour, o.created, o.complete_date), 24), 
      2, '0'), 
      'h' 
    ) as time_to_complete, 
from 
    orders o 
; 

结果:

+---------+---------------------+---------------------+------------------+ 
| id  | created    | complete_date  | time_to_complete | 
+---------+---------------------+---------------------+------------------+ 
| 2393721 | 2018-02-20 00:01:44 | 2018-02-21 02:32:08 | 1d 02h   | 
| 2393722 | 2018-02-20 00:02:56 | 2018-02-21 00:32:08 | 1d 00h   | 
| 2393723 | 2018-02-20 00:04:12 | 2018-02-20 21:32:07 | 0d 21h   | 
| 2393724 | 2018-02-20 00:04:50 | 2018-02-20 23:47:05 | 0d 23h   | 
| 2393725 | 2018-02-20 00:07:07 | 2018-02-20 17:32:03 | 0d 17h   | 
| 2393726 | 2018-02-20 00:13:41 | 2018-02-21 00:32:08 | 1d 00h   | 
| 2393727 | 2018-02-20 00:14:25 | 2018-02-21 00:32:08 | 1d 00h   | 
| 2393728 | 2018-02-20 00:16:47 | 2018-02-20 23:32:04 | 0d 23h   | 
| 2393729 | 2018-02-20 00:17:19 | 2018-02-20 23:47:09 | 0d 23h   | 
| 2393730 | 2018-02-20 00:17:59 | 2018-02-21 01:32:08 | 1d 01h   | 
+---------+---------------------+---------------------+------------------+ 
相关问题