Presto - 将 2 个字符串字段转换为日期

问题描述 投票:0回答:1

我正在寻找一种处理友好的方法来从 2 个 VARCHAR 字段(年和月)创建日期字段,以便输出始终是输入月份的第一个。

输出格式

  • %Y-%m-%d
    其中 %d 始终为 01

当前字段

  1. 字段
    c_year
    (VARCHAR),格式为“FY##”(FY22、FY23、FY24 等)
  2. 字段
    c_month
    (VARCHAR),格式为 3 个字母缩写(Jan、Feb、Mar)

我将一些方法放在一起,但它们似乎运行得非常慢。

  1. 使用嵌套 CONCAT(SUBSTR()) 的 DATE_PARSE 来获取 4 位数的年份和月份的 CASE 语句(12 个检查)。
  2. DATE_PARSE 与 LPAD 和 CASE 等

我想有一个比下面这样愚蠢的方法更好的方法:

SELECT date_parse(
           CONCAT('20', substr(c_year, 3, 2), '-', 
                  CASE c_month 
                      WHEN 'Jan' THEN '01'
                      WHEN 'Feb' THEN '02'
                      WHEN 'Mar' THEN '03'
                      WHEN 'Apr' THEN '04'
                      WHEN 'May' THEN '05'
                      WHEN 'Jun' THEN '06'
                      WHEN 'Jul' THEN '07'
                      WHEN 'Aug' THEN '08'
                      WHEN 'Sep' THEN '09'
                      WHEN 'Oct' THEN '10'
                      WHEN 'Nov' THEN '11'
                      WHEN 'Dec' THEN '12'
                  END,
                  '-01'),
           '%Y-%m-%d') AS period
FROM c_table
postgresql presto
1个回答
0
投票
select 
to_date(substring('FY22' from 3 for 2) || 'Jan' || '01', 'FYYY-Mon-DD');

2002-01-01
``
© www.soinside.com 2019 - 2024. All rights reserved.