需要从配置单元中给定的时间戳减去一些小时

时间:2018-11-21 08:03:12

标签: mysql sql hive hiveql sql-date-functions

输入:unix_timestamp('01 / 15/2018 15:26:37','mm / dd / YYYY hh:mm:ss')

预期输出比utc输入时间晚4小时,即01/15/2018 11:26:37

我知道hive中有date_sub函数,但是它仅用于从给定的时间戳中减去天数。但是我需要知道是否有一种方法可以减去小时,分钟或秒。

我也尝试了以下方法,因为EDT时区比UTC晚4小时(但输出错误):

SELECT to_date(from_UTC_timestamp(unix_timestamp('01/15/2018 15:26:37', 'mm/dd/YYYY hh:mm:ss')*1000, 'EST6EDT')) as earliest_date; -- OUTPUT: 2017-12-31 (wrong) 

那么有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

它工作正常。

select from_unixtime(unix_timestamp('01/15/2018 15:26:37', 'MM/dd/yyyy HH:mm:ss')-4*3600, 'MM/dd/yyyy HH:mm:ss') 

答案 1 :(得分:1)

除了the answer of @StrongYoung

我发现将这样的长表达式定义为宏并将其放置在初始化文件(例如hive -i init-file.hql ...)中非常有用。

hive> create temporary macro sub_hours(dt string, hours int)
from_unixtime(unix_timestamp(dt, 'MM/dd/yyyy HH:mm:ss') - 3600 * hours, 'MM/dd/yyyy HH:mm:ss');
OK
Time taken: 0.005 seconds
hive> select sub_hours("01/01/2019 00:00:00", 5);
OK
12/31/2018 19:00:00
Time taken: 0.439 seconds, Fetched: 1 row(s)

从Hive 0.12.0开始可以使用宏,here可以找到更多详细信息(请注意“错误修复”部分)。