在 presto 中将 bigint 转换为时间戳

Converting bigint to timestamp in presto

我的数据集中有一列的数据类型为 bigint:

Col1     Col2
   1     1519778444938790
   2     1520563808877450
   3     1519880608427160
   4     1520319586578960
   5     1519999133096120

如何将 Col2 转换为以下格式:

年月日hr:mm:ss

我不确定当前专栏的格式,但我知道它应该是时间戳。

任何帮助都会很棒,谢谢!

你试过使用from_unixtime这样的函数吗?您可以使用它将 unix 时间转换为时间戳,然后您可以使用 date_format 以您想要的方式显示它。请注意,在您的示例中,您的 unix 时间是微秒,因此您可能希望先将其转换为毫秒。

我还没有测试过,但我假设你的代码应该是这样的:

date_format(from_unixtime(col2/1000), '%Y-%m-%d %h:%i:%s')

请注意 from_unixtime 也接受时区。

请访问此页面以查看有关日期相关功能的更多详细信息:https://docs.starburstdata.com/latest/functions/datetime.html

我认为分母应该是 1000000 而不是 1000。可能是打字错误。无论如何,在这里添加测试结果以供其他人参考。

-- 微秒

select date_format(from_unixtime(cast('1519778444938790' as bigint)/1000000), '%Y-%m-%d %h:%i:%s');

2018-02-2812:40:44

如果需要过滤列为BIGINT Unix格式的数据,则可以使用以下代码段进行比较:from_unixtime(d.started_on /1000) >= CAST('2022-05-10 22:00:00' AS TIMESTAMP )