hive查询以查找两个时间戳之间的差异

t5fffqht  于 2021-06-25  发布在  Hive
关注(0)|答案(2)|浏览(344)

我有两个时间戳请求和响应。我需要找出这两个时间戳在毫秒内的区别,如下所示。

Request: 2020-03-20 10:00:00:010
Response: 2020-03-20 10:00:00:020
Diff: 10 millisecond

我试过了,但没能得到我所要求的答案。我试着如下,但它给我0而不是10。

select (unix_timestamp(2020-03-20 10:00:00:010) - unix_timestamp(2020-03-20 10:00:00:020))
cetgtptt

cetgtptt1#

配置单元时间戳将始终类似于:

2020-03-20 01:50:19.158

要获取两个时间戳之间的差异,可以尝试运行以下查询:

select date_format("2020-03-20 10:00:00.020",'S') -date_format("2020-03-20 10:00:00.010",'S');

如果毫秒部分由“:”分隔,则可以通过运行以下查询来获得差异:

select cast(substr("2020-03-20 10:00:00:020",-3) as int) -  cast(substr("2020-03-20 10:00:00:010",-3) as int);
ni65a41a

ni65a41a2#

这是因为unix\u时间戳修剪了毫秒部分。你需要一些正则表达式来解析它-比如:

select cast(regexp_replace('2020-03-20 10:00:00:020', 
                           '(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2}):(\\d{3})',
                           '$1-$2-$3 $4:$5:$6.$7') as timestamp);

SELECT ROUND((CAST(CAST('2020-03-20 10:00:00.020' AS TIMESTAMP) AS DOUBLE) 
            - CAST(CAST('2020-03-20 10:00:00.010' AS TIMESTAMP) AS DOUBLE)) * 1000)
as timediff

毫秒部分的格式应为yyyy-mm-dd hh:mm:ss.sss,因此您可能需要将“:”替换为“.”毫秒。

相关问题