背景:目前有个项目,需要将一个字段进行列转行,但是数据并不是特别规范,存在某些行是’'的存在,然后最终得出的结果就类似于: ,,123,456,235,,789,,,
,对这类数据进行清洗
分析问题:
,,123,456,,,,235,,789,,,
存在两个问题:
① 多个逗号需要转为一个逗号
② 前后两端的逗号需要去除
解决:
① 多个逗号需要转为一个
select regexp_replace(',,123,456,,,,235,,789,,,','[,]+',',');
得到: ,123,456,235,789,
② 去除左边的逗号
select regexp_replace(',123,456,235,789,','^(,*+)','');
得到: 123,456,235,789,
② 去除右边的逗号
select regexp_replace('123,456,235,789,', '(,*+)$','');
得到 123,456,235,789
至此就完成了,连起来就是:
select regexp_replace(regexp_replace(regexp_replace(',,123,456,,,,235,,789,,,','[,]+',','),'^(,*+)',''), '(,*+)$','');
有更好的方式请推荐给我,Thanks♪(・ω・)ノ