从 hive 中的日期字段中减去 n 个月

Posted

技术标签:

【中文标题】从 hive 中的日期字段中减去 n 个月【英文标题】:Subtract n months from a date field in hive 【发布时间】:2018-06-29 22:02:57 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

使用 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函数(或)使用子字符串函数提取月份

【讨论】:

以上是关于从 hive 中的日期字段中减去 n 个月的主要内容,如果未能解决你的问题,请参考以下文章

Javascript 从日期开始减去增加1个月 [重复]

如何从今天的日期减去 4 个月?

从日期时间减去 1 年

如何从 MySQL 中的日期时间中减去小时数?

java - 如何从Java中存储日期的给定字符串字段中减去X天? [复制]

hive 英文月份转数字