如何在不丢失小时、分钟和秒的情况下将天数添加到 Hive 时间戳

How can i add days to a Hive timestamp without loosing hours, minutes and seconds

我正在使用 Hive 2.6.5,当我想在我的时间戳中添加天数时,它不会保留小时、分钟和秒。

例子

SELECT from_unixtime(unix_timestamp(date_add("2021-01-15 09:34:21",2),'yyyyMMdd'),'yyyy-MM-dd HH:mm:ss');

除此之外,它 return 是一个错误的结果:

2020-12-01 **00:00:00**

我想return值 2021-01-17 09:34:21

谢谢

  1. date_add 截断
  2. 不需要unix_timestamp+from_unixtime转换

转换为时间戳,添加间隔:

SELECT timestamp("2021-01-15 09:34:21") + interval '2' day;

结果:

2021-01-17 09:34:21.0

时间戳以零毫秒部分显示,这是默认的时间戳表示。 如果您希望它作为没有毫秒的字符串,请使用 date_format 格式化或简单地采用 substr()

SELECT date_format(timestamp("2021-01-15 09:34:21") + interval '2' day,'yyyy-MM-dd HH:mm:ss')

结果:

2021-01-17 09:34:21

同样使用 substr:

SELECT substr(timestamp("2021-01-15 09:34:21") + interval '2' day,1,19)

如果你需要动态计算间隔,而你的Hive版本不支持,请看这个例子:

with mytable as (
select timestamp("2021-01-15 09:34:21") ts, 2 d
)
SELECT from_unixtime(unix_timestamp(ts) + (d*24*60*60))
from mytable

结果:

2021-01-17 09:34:21