如何将20190801转换为2019年8月

时间:2019-09-09 18:33:23

标签: presto amazon-athena

我有一列是整数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类似的格式。

1 个答案:

答案 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