首页 > 解决方案 > Snowflake SQL 中的子字符串替换

问题描述

我需要替换、格式化字符串以使其与键匹配。

-- 替换符号 ( ) ,不带空格, -- 用下划线替换单个空格, -- 用 BD 替换 BAND

例如 x_input = 高等教育工作者 10 级,第 2 级(有薪) x_output = HEW_HIGHER_EDUCATION_WORKER_LEVEL_10_BD_2_SALARIED

我用嵌套替换编写了代码,它给出了正确的输出模式

select 'Higher Education Worker Level 10, Band 2 (salaried)' as class_0,
replace(replace(replace(upper('Higher Education Worker Level 10, Band 2 (salaried)'), '(', ''), ')', ''), ' ', '_') as class_1,
replace(class_1, ',', '') as class_2,
replace(class_2, 'Band', 'BD') as class_4

有没有更优雅的方法来做到这一点,我正在阅读雪花正则表达式模式匹配帮助,但找不到更清洁的方法,而且它也嵌套了几次迭代。

任何提示将不胜感激。

谢谢

标签: snowflake-cloud-data-platform

解决方案


对于一个字符的替换和删除,您可以使用translate(),这将大大缩短倍数replace()

查询与问题相同的结果,但代码更少:

select 'Higher Education Worker Level 10, Band 2 (salaried)' as class_0,
translate(upper(class_0), ' ()', '_') as class_1,
replace(class_1, ',', '') as class_2,
replace(class_2, 'Band', 'BD') as class_4;

一步:

select replace(translate(upper(class_0), ' (),', '_'), 'Band', 'BD') class_4
from (
  select 'Higher Education Worker Level 10, Band 2 (salaried)' class_0
)

推荐阅读