我遇到一种情况,我想将地址分为Street Number
和Street Name
。
样本数据
百线路1093号
霍利街4442号公寓
莎士比亚路1401/142号公寓
诺斯科特Akoranga Drive 45号北桥K109单元
在这些示例中,粗体部分为Street Number
,其余部分为Street Name
。
到目前为止,我目前的努力并没有帮助我。有人对此有快速解决方案吗?
-Key是地址的Street Number
部分在最后一次出现Number的位置结束。
最佳答案
例
Declare @YourTable Table ([Id] varchar(50),[Addr] varchar(50))
Insert Into @YourTable Values
(1,'1093 Hundred Line Road')
,(2,'Flat 4442 Holly StreetAvondale')
,(3,'Apartment 1401/142 Shakespeare Road')
,(4,'Unit K109 Northbridge 45 Akoranga Drive, Northcote')
Select ID
,Addr1 = left(Addr,len(Addr)-patindex('%[0-9]%',reverse(Addr))+1)
,Addr2 = ltrim(right(Addr,patindex('%[0-9]%',reverse(Addr))-1))
From @YourTable
还是只是为了好玩-使用交叉申请
Select ID
,Addr1 = substring(Addr,1,B.Pos)
,Addr2 = ltrim(substring(Addr,B.Pos+1,100))
From @YourTable
Cross Apply (values (len(Addr)-patindex('%[0-9]%',reverse(Addr))+1)) B(Pos)
退货
ID Addr1 Addr2
1 1093 Hundred Line Road
2 Flat 4442 Holly StreetAvondale
3 Apartment 1401/142 Shakespeare Road
4 Unit K109 Northbridge 45 Akoranga Drive, Northcote
我应该注意:
解析地址可能是一个滑坡。请考虑以下内容:Address standardization within a database
关于sql - 如何在SQL中拆分字符串以取出特定部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45496397/