从 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)
另见关于格式转换的回答:
我还在学习 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)
另见关于格式转换的回答: