从配置单元中的日期字段中减去n个月

时间:2018-06-29 22:02:57

标签: datetime hive

我试图将表限制为特定的月份数,例如在WHERE子句中限制为24。我使用以下方法没有成功:

月份(EVENT_START_DT_TM)> add_months(from_unixtime(unix_timestamp()),-1)

EVENT_START_DT_TM是真实的日期时间字段,我希望从当前日期开始与该字段匹配的24个月的回溯期。查看HIVE手册,很多日期函数需要日期STRINGS,但是什么是真正的DATE字段?

1 个答案:

答案 0 :(得分:0)

使用 Current_date() add_months()函数获取24个月之前的日期,然后使用 date_format()函数将格式更改为根据您的需求(与 EVENT_START_DT_TM 匹配  字段格式)

hive> select date_format(add_months(current_date(),-24),"yyyy-MM-dd HH:mm:ss.SSS");
+--------------------------+--+
|           _c0            |
+--------------------------+--+
| 2016-06-29 00:00:00.000  |
+--------------------------+--+

“真实日期”字段是指日期字段中的数据与 yyyy-MM-dd 格式匹配,然后您可以从该字段中提取月份

hive> select month("2018-10-12");
+------+--+
| _c0  |
+------+--+
| 10   |
+------+--+

如果字段值不是真实的日期字段,即不是yyyy-MM-dd格式

 hive> select month("20181012");
+-------+--+
|  _c0  |
+-------+--+
| NULL  |
+-------+--+

我们不能通过使用months函数直接提取月份,而是需要更改字段的格式,然后使用from_unixtime / unix_timestamp..etc函数(或使用子字符串函数)提取月份