当前位置: 首页 > 知识库问答 >
问题:

雪花子字符串Concat问题:无法识别数值“|”

白光耀
2023-03-14

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

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

当我尝试在雪花中这样做时,虽然我不断得到这个“数值”是不被识别的错误。有什么想法如何修复?下面是我尝试的。

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 

共有1个答案

轩辕海
2023-03-14

与查询中的一大堆奇怪的SQL相比,此逻辑作为SQL UDF看起来要好得多:

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个月,并再次格式化。

 类似资料:
  • 无法识别数值“ABC_0011O00001Y31VPQAI” 检查表DDL,发现只有3列定义为NUMBER,而rest定义为VARCHAR。 我检查了SELECT查询,在这些NUMBER Datatype列中没有找到任何字符串值。我还尝试在所有Varchar列中搜索值'ABC_0011O00001Y31VPQAI',但没有找到任何 我知道一件事,雪花并不总是显示正确的错误。我是不是漏掉了什么?有什

  • 我在雪花中有一个字符串值如下;

  • 关于如何使用传递的参数的任何线索。

  • 我正在将下面的sql查询转换为Snowflake,并得到错误“numeric Value”-“未识别”,但它没有行号。我假设它在整个查询中引用了各种“-1”实例,但没有引用任何行,所以不清楚是什么导致了这个问题。如果是对“-1”的各种引用--雪花中的替代方案是什么?Try_To_Number在这种情况下不起作用,所以希望社区有建议

  • null null 字符串比较给出错误的输出。 我无法使用cast或to_number函数将其转换为number,因为字符串值大于38位。

  • 为什么我会得到这个错误消息,尤其是在中唯一的列是varchar数据类型的情况下?