如何解决如何删除,替换postgresql中字段的数据以简化它们?
我被困在这一点上,我正在尝试使用 postgresql 清理表的行名。该表适用于威尔士和英格兰的地区。
我想要的是删除字符串 'District'、'(B)'、'London Boro' 以及双英语 - 威尔士名称中连字符之前的所有内容,例如(斯旺西 - 阿伯塔威)我想消除连字符之前的所有内容(无论如何我想知道如何在两个方向上做到这一点)并获得(Abertawe)。我使用前 3 个字符串进行管理,但使用连字符部分我找不到问题的解决方案。
我尝试过使用替换和修剪,但我没有得到想要的结果。
这是我上次尝试过的代码:
select name,trim(replace(replace(replace(replace(name,'District',''),'(B)','London Boro','% - %',' - ')
from district;
这是所用表格的示例
name
Swansea - Abertawe
Barnsley District (B)
Bath and North East Somerset
Bedford (B)
Birmingham District (B)
Blackburn with Darwen (B)
Blackpool (B)
Blaenau Gwent - Blaenau Gwent
Bolton District (B)
Bournemouth (B)
Bracknell Forest (B)
Bradford District (B)
The Vale of Glamorgan - Bro Morgannwg
Aylesbury Vale District
Chiltern District
South Bucks District
Wycombe District
Bury District (B)
Cardiff - Caerdydd
Caerphilly - Caerffili
Calderdale District (B)
Cambridge District (B)
East Cambridgeshire District
City of Westminster London Boro
Croydon London Boro
Ealing London Boro
Enfield London Boro
Castell-nedd Port Talbot - Neath Port Talbot
这就是我想要获得的:
name
Abertawe
Barnsley
Bath and North East Somerset
Bedford
Birmingham
Blackburn with Darwen
Blackpool
Blaenau Gwent
Bolton
Bournemouth
Bracknell Forest
Bradford
Bro Morgannwg
Aylesbury Vale
Chiltern
South Bucks
Wycombe
Bury
Caerdydd
Caerffili
Calderdale
Cambridge
East Cambridgeshire
City of Westminster
Croydon
Ealing
Enfield
Neath Port Talbot
谢谢,
解决方法
使用 Case 语句区分这两个条件,并使用 Position
函数检查 -
是否存在。
试试这个
select
name,case when position(' - ' in name)>0 then
trim(replace(replace(replace(substr(name,position(' - ' in name)+3,length(name)),'District',''),'(B)','London Boro',''))
else
trim(replace(replace(replace(name,''))
end
from district
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。