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

Month in MM using Month() in Hive

Select * from concat(YEAR(DATE_SUB(MAX(Column_name),60),MONTH(DATE_SUB(MAX(Column_name),60),-01)

month() 仅产生 单个 数月直到九月,即一月 returns 1 而不是 01。需要帮助来处理这个问题。

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

month() 函数 returns 整数,这就是为什么没有前导零的原因。您可以使用 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() 函数 return 类型是 String,因为创建该方法时不存在 Date 类型。看这里:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF