我想计算两个事件之间的差异。这两个事件都以毫秒为单位存储在unix\u时间戳中。下面是一个例子:146474049000如何将时差转换为小时格式。我尝试了一些方法,比如datediff和/或timestamp(event1)-timestamp(event2)。我想要的是选择timestamp(e1.time)、timestamp(e2.time)、e1.time-e2.time作为与testdata的时间差;时间差的格式应为小时、分钟、秒。。。我怎么能得到这个?提前谢谢彼得
1dkrff031#
如果差值小于24小时,则可以使用以下方法:
[localhost:21000] > select from_unixtime(1392394861 - 1392394860, 'HH:mm:ss'); +----------------------------------------------------+ | from_unixtime(1392394861 - 1392394860, 'hh:mm:ss') | +----------------------------------------------------+ | 00:00:01 | +----------------------------------------------------+
如果差异可以超过24小时,下面这个相当难看的表情就可以了:
[localhost:21000] > select concat(cast(floor((1392394861 - 1392300000)/60/60) as string), from_unixtime(1392394861 - 1392300000, ':mm:ss')); +----------------------------------------------------------------------------------------------------------------------+ | concat(cast(floor((1392394861 - 1392300000) / 60 / 60) as string), from_unixtime(1392394861 - 1392300000, ':mm:ss')) | +----------------------------------------------------------------------------------------------------------------------+ | 26:21:01 | +----------------------------------------------------------------------------------------------------------------------+
或者,如果您喜欢带有明确日期的格式:
[localhost:21000] > select concat(cast(floor((1392394861 - 1392300000)/60/60/24) as string), " days and ", from_unixtime(1392394861 - 1392300000, 'HH:mm:ss')); +-------------------------------------------------------------------------------------------------------------------------------------------+ | concat(cast(floor((1392394861 - 1392300000) / 60 / 60 / 24) as string), ' days and ', from_unixtime(1392394861 - 1392300000, 'hh:mm:ss')) | +-------------------------------------------------------------------------------------------------------------------------------------------+ | 1 days and 02:21:01 | +-------------------------------------------------------------------------------------------------------------------------------------------+
bxpogfeg2#
如果您只对小时感兴趣,那么不要将unixtimestamp转换为时间戳,只需使用sql数学函数即可
select (time2 - time1)/(1000 * 60 * 60) as hours from mytable;
2条答案
按热度按时间1dkrff031#
如果差值小于24小时,则可以使用以下方法:
如果差异可以超过24小时,下面这个相当难看的表情就可以了:
或者,如果您喜欢带有明确日期的格式:
bxpogfeg2#
如果您只对小时感兴趣,那么不要将unixtimestamp转换为时间戳,只需使用sql数学函数即可