在Hive中,是否有任何方法可以降低毫秒精度(而不是舍入)?
例如,我有下面的时间戳,小数点后3位是毫秒
2019-10-08 21:21:39.163
我想得到精确到1位小数的时间戳(去掉最后两毫秒):
2019-10-08 21:21:39.1
我只能把时间戳转换成一个精度只有一个值的十进制:
cast(floor(cast(2019-10-08 21:21:39.163 AS double)/0.100)*0.100 AS decimal(16,1)) AS updatetime
这将提供:
1570537299.1
问题是:我不知道如何将上面的值转换回毫秒级的时间戳。更好的是,如果有更好的方法将时间戳精度从小数点后3位降低到1位,我将不胜感激。
我必须将上述代码转换为十进制的原因是,如果我只执行以下操作:
floor(cast(2019-10-08 21:21:39.163 AS double)/0.100)*0.100 AS exec_time
这会产生如下结果:
1570537299.100000001
这不好,因为我需要将这个表x与另一个表y连接起来。表x的时间戳类似 2019-10-08 21:21:39.163
. 但是表y以每100ms的间隔存储数据,其时间戳正好是: 2019-10-08 21:21:39.1
后面的00000001将阻止表x的时间戳与表y精确Map
1条答案
按热度按时间jc3wubiy1#
如果需要删除最后两毫秒,请使用
substr()
如有必要,再次转换为时间戳。例如:退货: