hive-timedifference格式

mpbci0fu  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(229)

我想计算两个事件之间的差异。这两个事件都以毫秒为单位存储在unix\u时间戳中。
下面是一个例子:146474049000
如何将时差转换为小时格式。
我尝试了一些方法,比如datediff和/或timestamp(event1)-timestamp(event2)。
我想要的是
选择timestamp(e1.time)、timestamp(e2.time)、e1.time-e2.time作为与testdata的时间差;
时间差的格式应为小时、分钟、秒。。。我怎么能得到这个?提前谢谢彼得

1dkrff03

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                                                                                                                       |
+-------------------------------------------------------------------------------------------------------------------------------------------+
bxpogfeg

bxpogfeg2#

如果您只对小时感兴趣,那么不要将unixtimestamp转换为时间戳,只需使用sql数学函数即可

select (time2 - time1)/(1000 * 60 * 60) as hours from mytable;

相关问题