2013-05-12 147 views
1

我有保存票据信息的表格,并且我想知道票证在特定池中停留了多长时间。我写了下面的查询:格式mysql TIMESTAMP AS x天,x小时,x分钟,x秒

SELECT FROM_UNIXTIME((MAX(T.transfareDate)-MAX(TMAX.transfareDate)),'%k hours, %i minutes, %s seconds') AS 'Time to repair' 
FROM aims_item_group_transfare T 
LEFT JOIN aims_item_group_transfare TMAX ON T.item_id = TMAX.item_id AND TMAX.toGroupId=20 
WHERE T.fromGroupId =20 

它正常工作,现在我想除了获得天数如下: 天:小时:分钟:秒

任何机构可以帮助吗?

回答

0

您可以使用period_diff来计算月份的差异。请注意,该函数需要使用"YYYYMM"字符串格式的参数,而不是日期。

select concat(
      period_diff(
       date_format(DateDiff, '%Y%m') 
      , '197001') -- 1970-01 = Start of UnixTime 
     , ' months ' 
     , date_format(
       DateDiff, 
       '%k hours, %i minutes, %s seconds') 
     ) as TimeToRepair 
from (
     select from_unixtime(
        max(T.transfareDate) - max(TMAX.transfareDate) 
       ) as DateDiff 
     from aims_item_group_transfare T 
     left join 
       aims_item_group_transfare TMAX 
     on  T.item_id = TMAX.item_id 
       and TMAX.toGroupId = 20 
     group by 
       T.item_id 
     ) as SubQueryAlias 

Example at SQL Fiddle.

+0

嗨Andomar, 谢谢你的帖子,我还是想在天黯然失色时间:小时:分钟:Sesconds。请记住,我节省时间戳格式的时间 谢谢 – Hassan 2013-05-12 12:03:16

+0

谢谢你的注意。该示例假定表列存储时间戳(请参阅底部的SQL小提琴链接)。调整确切的时间格式应该很容易 - 我将其作为练习。 – Andomar 2013-05-12 19:28:44