MM 中的月份使用 Hive 中的 Month()

Posted

技术标签:

【中文标题】MM 中的月份使用 Hive 中的 Month()【英文标题】:Month in MM using Month() in Hive 【发布时间】:2017-10-10 03:30:37 【问题描述】:
Select * from concat(YEAR(DATE_SUB(MAX(Column_name),60),MONTH(DATE_SUB(MAX(Column_name),60),-01)

month() 在 9 月之前的几个月内仅产生 单个 位数字,即 Jan 返回 1 而不是 01。需要帮助来处理这个问题。

我正在使用此输出提供给另一个使用 TO_DATESELECT 查询。

【问题讨论】:

【参考方案1】:

month() 函数返回整数,这就是为什么没有前导零的原因。您可以使用lpad(month,2,0) 函数来格式化月份:

hive> select lpad(month('2017-09-01'),2,0);
OK
09
Time taken: 0.124 seconds, Fetched: 1 row(s)
hive> select lpad(month('2017-10-01'),2,0);
OK
10
Time taken: 0.433 seconds, Fetched: 1 row(s)

您也可以使用substr() 从日期中提取年份和月份:

hive> select substr('2017-10-01',1,4) as year, substr('2017-10-01',6,2) as month;
OK
year    month
2017    10

在 Hive 2.1.0 (HIVE-13248) 之前的

date_sub() 函数返回类型是 String,因为在创建方法时不存在 Date 类型。见这里:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

【讨论】:

以上是关于MM 中的月份使用 Hive 中的 Month()的主要内容,如果未能解决你的问题,请参考以下文章

JAVA语句怎么把日期(类型为DATA)中的月份提取出来

SQL里怎么把日期截取为月份

oracle sql中的月份数到月份文本

Hive 功能:添加月份到日期

谷歌浏览器中的输入类型=“月”格式

Hive 查询中的问题3