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

rwqw0loc  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(451)

我还在学习sql,在sqlserver或postgre上找到了一些解决方案ы, 但它在色调上不起作用 DATEDIFF ,只允许我计算天与秒之间的差值,分钟不可用。非常欢迎帮助。
我可以把时间戳和 substring_index ,但是我找不到正确的方法来比较和减去开始时间到结束时间,以获得秒的准确计算。我找不到时间函数,所以我假设我应该根据时间戳来计算它。作为获得

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

b1zrtrql

b1zrtrql1#

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

相关问题