将hive-1.0时间戳截断为秒,并将格式从“ yyyy:mm:dd:ss.SSS”更改为“ yyyy:mm:dd:ss”

问题描述

基本上是标题

我正在寻找一种仅采用hive-1.0语法的合理方法,以仅将时间戳记中的毫秒字段截断。

我正在考虑的过分幼稚的方法是:

cast(from_unixtime(second(cast([TIMESTAMP_IN_QUESTION] as string)),"yyyy:mm:dd:ss"),as timestamp)

但是我相信这最后包括毫秒字段中的.00。

有一种干净的方法吗?

解决方法

最正确的时间戳格式是

yyyy-MM-dd HH:mm:ss.SSSSSS

默认情况下,不带毫秒的默认时间戳将以.00.0结尾打印。因为它是时间戳的字符串表示形式。如果您希望它不包含毫秒部分,请将其转换为字符串并显式指定格式,或者仅使用子字符串获取不包含毫秒的值。 substr()可以与时间戳以及字符串文字一起正常使用。如果您只想删除毫秒而不更改其他所有内容,这是最简单的方法:

select substr('2020-01-01 12:10:10.123',1,19)

返回:

2020-01-01 12:10:10