地址解析 - 楼#

时间:2017-08-01 16:37:28

标签: sql sql-server tsql ssms

我有一些需要解析的地址数据。除了楼层数据之外,大多数地址信息都以适合我的方式发布。

对于楼层数据我会以不同的方式进行,我可能会得到以下格式:

“123 Main Street Floor 2”或“123 Main Street 2nd Floor”

如果我正在使用案例......何时使用语句来解析我的数据,如何确定何时获取数字或之前的数字?最终我希望例如1的“Floor 2”和例2的“2nd Floor”。

这是我目前正在使用的sql。

CASE WHEN (addr LIKE 'floor%' and addr LIKE '%[0-9]%' ) THEN SUBSTRING(addr, CHARINDEX('Floor ', addr), 
LEN(addr))

2 个答案:

答案 0 :(得分:2)

使用PatIndex()

之和的又一个选项

示例

Declare @YourTable table (addr varchar(50))
Insert into @YourTable values
 ('123 Main Street Floor 2')
,('123 Main Street 2nd Floor')
,('123 Main Street')

select *
       ,FloorNr = NullIf(ltrim(rtrim(substring(addr,patindex('%Floor [1-9]%',addr)+patindex('% [1-9]% Floor',addr),25))),addr)
From @YourTable 

<强>返回

addr                        FloorNr
123 Main Street Floor 2     Floor 2
123 Main Street 2nd Floor   2nd Floor
123 Main Street             NULL

答案 1 :(得分:1)

好吧,既然你说你只对上面的例子感兴趣...

declare @table table (addresses varchar(4000))

insert into @table
values
('123 Main Street Floor 2'),
('123 Main Street 2nd Floor')

select
    case 
        when right(addresses,5) = 'Floor' then right(addresses,CHARINDEX(' ',reverse(addresses),7)) 
        else substring(addresses,charindex('Floor',addresses,1),99) end
from
    @table