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

Truncate hive-1.0 timestamp to seconds and change format from "yyyy:mm:dd:ss.SSS" to "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)

Returns:

2020-01-01 12:10:10