如何在PostgreSQL中删除替换字段数据实现地区名称字段清洗
问题原因
你的原有写法失效的核心原因是replace函数仅支持纯字符串精确匹配,你写的通配符% - %会被识别为普通字符串,无法匹配到连字符分隔的双语内容。
解决方案
使用PostgreSQL内置的split_part函数按分隔符拆分处理双语内容,逻辑分为两步:先完成指定字符串替换得到初步清洗结果,再按需拆分取数即可。
1. 保留连字符后内容(符合你的预期输出)
SELECT TRIM( CASE WHEN STRPOS(cleaned_name, ' - ') > 0 THEN SPLIT_PART(cleaned_name, ' - ', 2) ELSE cleaned_name END ) AS name FROM ( -- 子查询完成第一步字符串替换 SELECT TRIM( REPLACE( REPLACE( REPLACE(name, 'District', ''), '(B)', '' ), 'London Boro', '' ) ) AS cleaned_name FROM district ) t;
2. 反向保留连字符前内容
如果需要保留连字符前的内容,直接调整split_part的取值位置即可,无需额外判断:
SELECT TRIM(SPLIT_PART(cleaned_name, ' - ', 1)) AS name FROM ( SELECT TRIM( REPLACE( REPLACE( REPLACE(name, 'District', ''), '(B)', '' ), 'London Boro', '' ) ) AS cleaned_name FROM district ) t;
内容的提问来源于stack exchange,提问作者gcj
相关产品推荐
相关产品推荐

