【问题标题】:Snowflake Substring Concat Issue: Numeric value '' is not recognizedSnowflake Substring Concat 问题:无法识别数值“”
【发布时间】:2023-03-14 02:17:01
【问题描述】:

有一个财政季度列,我想在同一行中添加一个显示上一季度的列。我已经在画面中成功地做到了这一点,逻辑如下。

IF RIGHT([current_qtr], 1) = "1"
THEN LEFT([current_qtr],2)+ STR(INT(MID([current_qtr], 3,2)) -1) +"Q4"
ELSE LEFT([current_qtr],5)+ STR(INT(RIGHT([current_qtr],1)) -1)
END

雪花中的预期输出示例

current_qtr previous_qtr other columns
FY21Q1 FY20Q4 etc
FY21Q2 FY21Q1 etc

当我尝试在雪花中执行此操作时,虽然我不断收到此“数值 '' 无法识别错误。任何想法如何解决?以下是我尝试的。

SELECT *,
CASE 
   WHEN SUBSTR(p.current_qtr,5,1) = 1 
      THEN SUBSTR(p.current_qtr,1,2) || TRY_CAST(SUBSTR(p.current_qtr,3,2) as INTEGER)-1 || 'Q4'
      ELSE SUBSTR(p.current_qtr,5,1) || TRY_CAST(SUBSTR(p.current_qtr,3,2) as INTEGER)-1
   End As prev_qtr
   FROM table as p 

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    这个逻辑看起来可能比一个查询中的一大堆奇怪的 SQL 更好:

    create or replace function prev_quarter_formatted(x string)
    returns string
    as
    $$
    (
        select 'FY' || to_varchar(prev_q, '%y') || 'Q' || quarter(prev_q)
        from (
            select substr(x, 3,2) year
                , (1+3*(substr(x, 6,1)::int-1)) q_to_month
                , to_date(year||'-'||q_to_month||'-01', 'yy-mm-dd') as_date
                , dateadd(month, -3, as_date) prev_q
        )
    )
    $$
    ;
    
    
    select prev_quarter_formatted('FY21Q1') a
    ;
    

    请注意,对于逻辑,我将季度转换为日期,减去 3 个月,然后再次格式化。

    【讨论】:

      【解决方案2】:

      转换的语法有一些细微的差别。您可以使用当前的 CASE 语句进行一些小的调整:

      SELECT *,
      CASE 
         WHEN SUBSTR(p.current_qtr,6,1) = '1' 
            THEN SUBSTR(p.current_qtr,1,2) || ((SUBSTR(p.current_qtr,3,2))::int - 1) || 'Q4'
            ELSE SUBSTR(p.current_qtr,1,2) || SUBSTR(p.current_qtr,3,2) || (SUBSTR(p.current_qtr,3,2)::int-1)
      END AS prev_qtr
      FROM table1 as p 
      

      【讨论】:

        猜你喜欢
        • 2021-07-17
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2020-02-27
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多