HIVE转换unix时间戳进行计算

莉迪亚斯

我正在尝试在时间戳之间进行减法,并希望将时间戳转换为可以转换为分钟的形式。

我使用regexp_replace将时间戳转换为以下形式:

2020-06-20T17:25:59:378Z

以下代码会将其转换为秒

unix_timestamp(regexp_replace(value,'(.*?)T(.*?):([^:]*?)Z$','$1 $2\\.$3'))  

我还有另外两个时间戳希望转换为秒,例如:

2020-03-19 15:45:33
03-19-2020 11:07:25:103

如何使用regexp_replace()或其他任何函数将这两个时间戳转换为秒?

谢谢!

左连接

首先,unix_timestamp返回从unix纪元过去的秒数。它不会忽略毫秒。这就是为什么如果您想要以秒为单位的纪元时间,则只能提取的原因'yyyy-MM-dd HH:mm:ss'

其次,如果您在单个数据集中拥有所有这些不同的格式,并且想要全部转换,则可以使用case语句检查模式并进行相应转换:

with your_data as ( --This is your data example
select stack(3,
             '2020-06-20T17:25:59:378Z',
             '2020-03-19 15:45:33',
             '03-19-2020 11:07:25:103'
            ) as str
)

select case when str rlike '^(\\d{4}-\\d{2}-\\d{2})[T ](\\d{2}:\\d{2}:\\d{2})' --matches first two strings
             then unix_timestamp(regexp_replace(str,'^(\\d{4}-\\d{2}-\\d{2})[T ](\\d{2}:\\d{2}:\\d{2})','$1 $2'))
            when str rlike '^(\\d{2})-(\\d{2})-(\\d{4})[T ](\\d{2}:\\d{2}:\\d{2})' --matches third string, allows T or space after date
             then unix_timestamp(regexp_replace(str,'^(\\d{2})-(\\d{2})-(\\d{4})[T ](\\d{2}:\\d{2}:\\d{2})','$3-$1-$2 $4'))
        end result_unix_timestamp
from your_data

返回值:

result_unix_timestamp
1592673959
1584632733
1584616045

您可以通过相应的转换为案例添加更多模式,并以此方式转换所有可能的案例。当然,不一定所有情况都应使用regex_replace进行转换。尽管正则表达式允许识别和解析最复杂的字符串。

另外,您可以尝试使用一种模式进行转换,如果返回null则尝试使用另一种模式进行转换,依此类推:

coalesce(unix_timestamp(regexp_replace(str,'^(\\d{4}-\\d{2}-\\d{2})[T ](\\d{2}:\\d{2}:\\d{2})','$1 $2')),
         unix_timestamp(regexp_replace(str,'^(\\d{2})-(\\d{2})-(\\d{4})[T ](\\d{2}:\\d{2}:\\d{2})','$3-$1-$2 $4'))
        )

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Pandas问题进行Unix时间戳转换

来自分类Dev

在Hive中转换时间戳

来自分类Dev

Unix时间戳格式转换

来自分类Dev

计算Unix时间戳之间的平均时间

来自分类Dev

将时间转换为Unix时间戳

来自分类Dev

从Unix时间戳到ISO时间戳的时间转换

来自分类Dev

计算分区HIVE中行的时间戳差异

来自分类Dev

在PySpark中将Unix时间戳转换为ms时间戳

来自分类Dev

PostgreSQL时间戳无法正确转换为Unix时间戳

来自分类Dev

Hive:如何转换毫秒时间戳?

来自分类Dev

将Datetime转换为Unix时间戳

来自分类Dev

转换为UNIX时间戳错误

来自分类Dev

Java将Unix时间戳转换为错误时间

来自分类Dev

如何将Unix时间戳转换为日期时间

来自分类Dev

将Unix时间戳转换为本地时间

来自分类Dev

将Unix时间戳转换为日期时间

来自分类Dev

将UNIX时间戳转换为日期时间(javascript)

来自分类Dev

如何将UTC时间转换为Unix时间戳

来自分类Dev

将Unix时间戳转换为人类可读的时间

来自分类Dev

在Hive中将字符串转换为时间戳

来自分类Dev

计算两个时间戳之间的差异,并获得Unix时间戳之间的差异

来自分类Dev

计算两个时间戳之间的差异,并获得unix时间戳之间的差异

来自分类Dev

Hive:时间戳间隔

来自分类常见问题

将Unix时间戳转换为Carbon对象

来自分类Dev

将Python日期转换为Unix时间戳

来自分类Dev

将UNIX时间戳转换为数据-iOS

来自分类Dev

在Java中将Unix时间戳转换为日期

来自分类Dev

转换Unix时间戳-Spotfire分析师

来自分类Dev

将UNIX时间戳转换为Elm中的Date对象