我有一列是整数201908。我需要将此列定为2019年8月。
我在SQl中知道,这样做很容易:如果salesmonth是列的名称
UPPER(FORMAT(cast(cast(cast(销售月为varchar(10))+'01'作为日期),'MMM-yyyy'))
如何在Hive中做到这一点?
我将salesmonth转换为varchar并添加01使其成为20190801。我尝试将date_parse转换为%MMM-%yy,但可以肯定的是我做错了。
select salesmonth, concat(cast(salesmonthas varchar(10)),'01') as t1
,date_format(concat(cast(salesmonth as varchar(10)),'01'),'%MMM-%yyyy') as t2
from ${db['PL_SALES']} where salesmonth= 201908 limit 10
预期输出:AUG-19
错误:Invalid_Function_Argument。格式无效:20190801
编辑:
使用Case语句更容易处理-但我希望避免使用case并寻找与SQL类似的格式。
答案 0 :(得分:3)
您可以使用date_parse
将'20190801'
解析为一个日期(实际上是timestamp
):
presto:default> SELECT date_parse('20190801', '%Y%m%d');
_col0
-------------------------
2019-08-01 00:00:00.000
然后您可以使用date_format
呈现所需的结果:
presto:default> SELECT date_format(date_parse('20190801', '%Y%m%d'), '%b-%Y');
_col0
----------
Aug-2019
或者,如果您想要类似'AUG-19'
的内容:
presto:default> SELECT upper(date_format(date_parse('20190801', '%Y%m%d'), '%b-%y'));
_col0
--------
AUG-19