繁体   English   中英

雪花:替换列值

[英]Snowflake: replacing column values

我有一列同时包含数字和字母数字字符。 对于列中的数字值,我只是想用一组不同的数字替换它们。 对于字母数字列,我用不同的字母和数字替换它们。 下面是几个值:

select * 来自 t1;

1234  
AB145C  
678BC  
8765  
3786CA  

SQL 下面由于某种原因无法正常工作:

select col1,  
case   
when  regexp_like(col1,'^[A-Z]+$')  
then   replace(replace(replace(replace(replace(replace(col1,'A','Z'),'B','Y'),'C','X'),'D','W'),'E','V'),'F','U')  
when try_to_number(col1) is not null  
then round(to_number(col1)*1.5)  
end as col1_replaced  
from t1;  

我在这里做错了什么?

Output 我现在得到:

COL1    COL1_REPLACED  
1234    1851  
AB145C  NULL  
678BC   NULL  
8765    13148  
3786CA  NULL   

所需的 output:

COL1    COL1_REPLACED  
1234    1851  
AB145C  ZY145X  
678BC   678YX  
8765    13148  
3786CA  3786XZ

CASE表达式的所有分支通常需要具有相同的类型。 由于第一个分支正在生成文本,因此ELSE分支也应该这样做。 您可以在此处将ROUND表达式转换为文本:

SELECT col1,
       CASE WHEN REGEXP_LIKE(col1, '^[A-Z]+$')
            THEN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(col1, 'A', 'Z'), 'B', 'Y'), 'C', 'X'), 'D', 'W'), 'E', 'V'), 'F', 'U')
            WHEN TRY_TO_NUMBER(col1) IS NOT NULL
            THEN CAST(ROUND(TO_NUMBER(col1)*1.5) AS VARCHAR(15))
       END AS col1_replaced
FROM t1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM