snowflake-cloud-data-platform - 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
有没有更优雅的方法来做到这一点,我正在阅读雪花正则表达式模式匹配帮助,但找不到更清洁的方法,而且它也嵌套了几次迭代。
任何提示将不胜感激。
谢谢
解决方案
对于一个字符的替换和删除,您可以使用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
)
推荐阅读
- javascript - 如何遍历json api数据对象
- azure - 使用什么 Azure 消息服务?
- amazon-web-services - 允许 CloudFront 访问 S3 源,同时让 S3 存储桶阻止所有公共访问?
- angular - 如何有一个可以容纳任何组件的侧边栏?
- java - Java 应用程序在使用 Thread.Sleep() 后没有响应;
- perl - 基于条件的哈希内容提取
- php - PHP文件不在AJAX中运行?
- unix - 没有这样的目录或文件 - Mac
- python - 尝试将多个 pandas 数据帧合并到 postgresql 数据库时出现编程错误
- amazon-web-services - 复制 AWS 实例