[英]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.