0

拜托我需要你的帮忙。

使用 SQL Server 2005 中的正则表达式,我得到了邮政地址的门牌号。一切正常。但我对某些方向有疑问。

比如我有地址Florecita Terrace 1746-B floor 3,你得到的家数是1746-B,但是同一个地址可以写成这样:Florecita Terrace 1746 B floor 3在这个方向上得到门牌号1746,把字母丢了,B因为它是分开的,不像以前那样用“- "

我必须更改我的查询才能获得1746 B什么?

这得到(门牌号):

Florecita Terrace 1746 B floor 3 | **1746**

这需要得到(门牌号):

Florecita Terrace 1746 B floor 3 | **1746 B**

这是我使用的查询:

declare @address table (address varchar(100))
insert into @address
    select 'Florecita Terrace 1746 B floor 3' union
    select 'Florecita Terrace 1746-B blablabla' union
    select 'Street Flor 4141' 

select  
     address,
     --patindex('%[0-9]%', address) as 'start',
     --charindex(space(1), address + space(1), patindex('%[0-9]%', address)) - (patindex('%[0-9]%', address)) as 'length',
    case 
        when patindex('%[^0-9]%' , address) > 0
                then substring(address, patindex('%[0-9]%', address), charindex(space(1), address + space(1), patindex('%[0-9]%', address)) - 
                                (patindex('%[0-9]%', address)))
        else address
    end as 'numeric'
from @address

非常感谢您的帮助!

4

2 回答 2

0
declare @address table (address varchar(100))
insert into @address
    select 'Florecita Terrace 1746 B floor 3' union
    select 'Florecita Terrace 1746-B blablabla' union
    select 'Street Flor 4141' 

select  
     address,
     --patindex('%[0-9]%', address) as 'start',
     --charindex(space(1), address + space(1), patindex('%[0-9]%', address)) - (patindex('%[0-9]%', address)) as 'length',
    case 
        when patindex('%[^0-9]%' , address) > 0
                then substring(address, patindex('%[0-9]%', address), charindex(space(1), address + space(1), patindex('%[0-9]%', address)) +(case when address not like ('%-%') then 2 else 1 end) - 
                                (patindex('%[0-9]%', address)))
        else address
    end as 'numeric'
from @address
于 2013-10-04T09:38:42.997 回答
0

如果启用 CLR 并添加为 .NET 正则表达式过程创建包装器的 .NET CLR 程序集,则可以让 SQL Server 使用功能齐全的正则表达式。可以在此处找到您不必在 Visual Studio 中为自己构建的一个很好的示例。

于 2013-10-03T23:14:18.653 回答