我试图将表限制为特定的月份数,例如在WHERE子句中限制为24。我使用以下方法没有成功:
月份(EVENT_START_DT_TM)> add_months(from_unixtime(unix_timestamp()),-1)
EVENT_START_DT_TM是真实的日期时间字段,我希望从当前日期开始与该字段匹配的24个月的回溯期。查看HIVE手册,很多日期函数需要日期STRINGS,但是什么是真正的DATE字段?
答案 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函数(或使用子字符串函数)提取月份