我遇到一种情况,我想将地址分为Street NumberStreet 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/

10-16 14:46