有一个财政季度列,我想在同一行中添加一个显示上一个季度的列。我已经成功地用下面的逻辑在画面中做到了这一点。
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
与查询中的一大堆奇怪的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数据类型的情况下?