【问题标题】:How do I convert 20190801 to Aug-2019如何将 20190801 转换为 2019 年 8 月
【发布时间】:2019-09-10 05:04:03
【问题描述】:

我有一列是整数 201908。我需要将其作为 2019 年 8 月。

我知道在 SQl 中,这很容易做到:如果 salesmonth 是列的名称

UPPER(FORMAT(cast(cast(salesmonth as varchar(10)) + '01' as date),'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

预计产出:8 月 19 日

错误:Invalid_Function_Argument。无效格式:20190801

编辑:

使用 Case 语句更容易处理 - 但我希望避免使用大小写并寻找与 SQL 类似的格式。

【问题讨论】:

  • 问题的标记有些含糊。您查询的是基于 Presto 的 Hive 还是 Athena? (我假设后者回答。)

标签: presto amazon-athena


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多