我应该从地址字段中删除以下内容。
例如。我有个字叫做“第五街234号”。
应该将其替换为5th Street。
我给查询为
select
ltrim(rtrim( substring ('Flat 123 5th Street', charindex('Flat ','Flat 123 5th Street') + 5, len ('Flat 123 5th Street'))))
它回来了
第五街123号
现在,我必须查找在下一次出现空格之前是否有数字值。
如果为数字,则将其删除,否则将其保留。
谁能帮忙。
问候,
赫玛
是的Marc_S,我应该做的(编辑)。
我不能用任何其他语言。只能在T-SQL中执行。
嗨,LittleBobbyTales,谢谢您的回答。
实际上它不是标准格式,我可能只有
第123章
或5th Street 123 Main 1st Road
或1st Main Flat 1
没有规则,在Flat一词之后我们将包含1个数字或2个数字。
可能有数字也可能没有数字。
可以是任何一种方式。
最佳答案
您可以使用标量值函数去除平坦部分。棘手的部分是如何检查单词是否为数字:@word like '%[^0-9]%'
通过查找不是0-9的字符来做到这一点。完整示例:
if OBJECT_ID('fn_StripFlat') is not null
drop function fn_StripFlat
go
create function dbo.fn_StripFlat(
@street varchar(150))
returns varchar(150)
as begin
declare @word varchar(150)
declare @result varchar(150)
declare @cur int
declare @next int
declare @in_flat bit
set @cur = 1
while 1=1
begin
set @next = CHARINDEX(' ', @street, @cur)
if @next = 0
set @word = SUBSTRING(@street, @cur, len(@street) - @cur + 1)
else
set @word = SUBSTRING(@street, @cur, @next - @cur)
if @word = 'flat'
begin
set @in_flat = 1
end
else if @word like '%[^0-9]%'
begin
set @in_flat = 0
set @result = IsNull(@result + ' ','') + @word
end
if @next = 0
break
set @cur = @next + 1
end
return IsNull(@result,'')
end
go
测试代码:
declare @Streets table (street varchar(150))
insert @Streets
select 'Flat 234 5th Street'
union all select 'Flat 123 456 5th Street 1st Main Road'
union all select '1st Main Flat 1'
union all select '5th Street 1st Main Road'
union all select 'FlatStreet'
union all select ''
select street
, dbo.fn_StripFlat(street)
from @Streets
打印:
Flat 234 5th Street 5th Street
Flat 123 456 5th Street 1st Main Road 5th Street 1st Main Road
1st Main Flat 1 1st Main
5th Street 1st Main Road 5th Street 1st Main Road
FlatStreet FlatStreet