gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:03:18 26 4
gpt4 key购买 nike

我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com