我有一个字符串 2013-01-01 12:00:01.546
代表一个带有毫秒的 timestamp
我需要将其转换为 bigint
不丢失毫秒数。
我试过 unix_timestamp 但我失去了毫秒数:
unix_timestamp(2013-01-01 12:00:01.546,'yyyy-MM-dd HH:mm:ss') ==> 1357059601
unix_timestamp(2013-01-01 12:00:01.786,'yyyy-MM-dd HH:mm:ss') ==> 1357059601
我也试过毫秒格式,但没有区别
unix_timestamp(2013-01-01 12:00:01.786,'yyyy-MM-dd HH:mm:ss:SSS') ==> 1357059601
有什么方法可以在配置单元中获得毫秒差异?
最佳答案
到目前为止,这是我带来的。
如果您所有的时间戳都只有 3 位数的一小部分,则可以简化它。
with t as (select timestamp '2013-01-01 12:00:01.546' as ts)
select cast ((to_unix_timestamp(ts) + coalesce(cast(regexp_extract(ts,'\\.\\d*',0) as decimal(3,3)),0)) * 1000 as bigint)
from t
1357070401546
结果验证:
select from_utc_timestamp (1357070401546,'UTC')
2013-01-01 12:00:01.546000
关于hadoop - 如何在毫秒内将字符串日期转换为 hive 中的大整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44653257/