我需要你的帮助。
使用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
非常感谢你的帮助!
答案 0 :(得分:0)
如果启用CLR并添加为.NET正则表达式过程创建包装器的.NET CLR程序集,那么可以让SQL Server使用功能齐全的正则表达式。您可以在here找到一个不必在Visual Studio中自行构建的好例子。
答案 1 :(得分: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