从 unix_time yyyy-MM-dd HH:mm:ss 以秒为单位计算 start_time 和 end_time 之间的差异

Calculate difference between start_time and end_time in seconds from unix_time yyyy-MM-dd HH:mm:ss

我还在学习 SQL 我在 SQL 服务器或 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

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)

另见关于格式转换的回答: