如何在不丢失小时、分钟和秒的情况下将天数添加到 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
谢谢
- date_add 截断
- 不需要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
我正在使用 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
谢谢
- date_add 截断
- 不需要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