Redshift SQL:从分隔列表中提取冒号后的数字代码
Redshift SQL提取codes字段中的数字列表解决方案
正确的REGEXP_REPLACE语句
直接用全局正则替换就能搞定,不需要多次嵌套REPLACE:
SELECT REGEXP_REPLACE(codes, '[^,:]+:', '', 'g') AS cleaned_codes FROM your_table;
正则模式解释
[^,:]+:匹配任意1个及以上不是逗号或冒号的字符,刚好对应每个项里冒号前的标题部分(符合你说的标题以字母开头、不含逗号/冒号的场景)::紧跟标题后的冒号,和前面的标题部分一起匹配'':把匹配到的"标题:"部分替换为空字符串'g':全局替换标志,确保所有项都被处理,而不是只替换第一个
你之前的方法问题在于把逗号和冒号都换成空格后,替换非数字内容会把分隔用的空格也去掉,导致数字连在一起,无法保留逗号分隔的结构。
正则表达式入门核心要点
基础元字符
.:匹配任意单个字符(换行符除外)+:匹配前面的元素1次或多次*:匹配前面的元素0次或多次^:方括号外表示行的开头;方括号内表示"排除",比如[^0-9]匹配非数字字符$:表示行的结尾
常用字符类
[0-9]:匹配任意单个数字[a-zA-Z]:匹配任意大小写字母[^abc]:匹配除a、b、c之外的任意字符
量词与标志
{n}:精确匹配n次,比如[0-9]{3}匹配3位数字{n,m}:匹配n到m次- 全局标志
g(Redshift中作为REGEXP_REPLACE的第四个参数):替换所有匹配项,默认只替换第一个
练习技巧
- 先明确要保留/替换的内容,从简单模式开始写
- 用
SELECT REGEXP_REPLACE('你的测试字符串', '正则', '替换值', 'g')快速验证效果,逐步调整正则
内容的提问来源于stack exchange,提问作者MJ B
相关产品推荐
相关产品推荐

