我有一些需要解析的地址数据。除了楼层数据之外,大多数地址信息都以适合我的方式发布。
对于楼层数据我会以不同的方式进行,我可能会得到以下格式:
“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))
答案 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