sql - 在 SQL 中分隔地址字符串

标签 sql sql-server string

我在 SQL Server 数据库中有一个名为 Houses 的表,其中有一列包含(丹麦)地址。在丹麦,街道名称始终位于门牌号之前,如果是公寓,则位于公寓信息之前。我想将街道名称和号码分成两个字符串,并忽略公寓信息。我的数据如下所示:

Address
Fisker Vejen 48B, 1.TV
Baunevej 29

因此,有些街道名称超过 1 个单词,有些地址包含公寓信息,有些则没有。有些门牌号也包含非数字字符。我希望它是:

Street_Name      House_Number
Fisker Vejen     48B
Baunevej         29

我可以使用以下代码提取街道名称:

select case when a.NumStart> 0 then LEFT(a.Address,a.NumStart-1) ELSE a.Address END as Street_Name,
    FROM
    (select patindex('%[0-9]%',Address) as [NumStart], Address from Houses) a

但如果没有楼层信息,我无法获取门牌号。有人可以帮忙吗?

谢谢!

最佳答案

这是一个解决方案:

SELECT *
        ,LEFT(Address,PATINDEX('% [0-9]%',Address)-1)'Street'
        , SUBSTRING(Address,PATINDEX('% [0-9]%',Address)+1,PATINDEX('%[0-9],%',Address+ ',')-PATINDEX('% [0-9]%',Address))'House Number'
FROM T

演示:SQL Fiddle

更新:如果门牌号始终以数字开头,后跟逗号或什么都不跟,那么这将起作用:

SELECT *
        ,LEFT(Address,PATINDEX('% [0-9]%',Address)-1)'Street'
        , SUBSTRING(Address,PATINDEX('% [0-9]%',Address)+1,PATINDEX('%, %',Address+ ', ')-PATINDEX('% [0-9]%',Address)-1)'House Number'
FROM Table1

演示2:SQL Fiddle2

关于sql - 在 SQL 中分隔地址字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17307323/

相关文章:

c++ - 通过 local_it 遍历 bucket 时 unordered_multimap 中的碰撞

sql - 合并多对多关系连接中的列值

MySQL : Storing business logic in table

java - 如何扫描 ArrayList 以获取字符串的长度

sql-server - 不授予查看服务器状态的自定义 sp_who

sql - 显示 R-Z 之间姓氏的 SQL 查询是什么,它只能显示名字的第一个首字母

iphone - 为 NSURLRequest 生成 URL 字符串失败启动

mysql - SQL n :n - best practice for queries in junction table

mysql - 仅从所有结果中选择最近的记录,其中 username = x?

sql - 案例陈述以确定我是否应该结合