小编典典

从unix_time计算开始时间和结束时间之间的差异(以秒为单位)yyyy-MM-dd HH:mm:ss

sql

我仍在学习SQL,并且在SQL Server或Postgre袆上找到了几个解决方案,但是在HUE上却看不到它
DATEDIFF,只能让我计算天秒数之间的差,而分钟数不可用。非常欢迎您的帮助。

我可以用来分割时间戳substring_index,但是后来我找不到正确的方法来比较start_time并将其减去end_time以获得准确的秒数。我找不到时间函数,所以我假设我应该根据时间戳进行计算。获得为

from_unixtime(unix_timestamp(start_time, "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"), 'yyyy-MM-dd HH:mm:ss')


substring_index(start_time, 'T', -1)s_tm,
substring_index(end_time, 'T', -1)e_tm


start_date 2018-06-19 13:59:41  
end_date   2018-06-19 14:01:17

期望的输出

01:36


阅读 333

收藏
2021-04-07

共1个答案

小编典典

Hive解决方案。

差异(以秒为单位):

select UNIX_TIMESTAMP('2018-06-19T14:01:17.000000',"yyyy-MM-dd'T'HH:mm:ss.SSSSSS")-
   UNIX_TIMESTAMP('2018-06-19T13:59:41.000000',"yyyy-MM-dd'T'HH:mm:ss.SSSSSS") as seconds_diff

结果:

96

现在计算HH:mm:ss的差:

select concat_ws(':',lpad(floor(seconds_diff/3600),2,'0'),        --HH
                     lpad(floor(seconds_diff%3600/60),2,'0'),     --mm
                     lpad(floor(seconds_diff%3600%60),2,'0')      --ss
       )

from
(
select --calculate seconds difference
       UNIX_TIMESTAMP('2018-06-19T14:01:17.000000',"yyyy-MM-dd'T'HH:mm:ss.SSSSSS")-
       UNIX_TIMESTAMP('2018-06-19T13:59:41.000000',"yyyy-MM-dd'T'HH:mm:ss.SSSSSS") as seconds_diff
) s

结果:

OK
00:01:36
Time taken: 1.071 seconds, Fetched: 1 row(s)

另请参阅有关格式转换的以下答案:https :
//stackoverflow.com/a/23520257/2700344

2021-04-07