我应该从地址栏中删除以下内容。
例如。我称之为'Flat 234 5th Street'。
它应该被替换为第五街。
我将查询作为
select
ltrim(rtrim( substring ('Flat 123 5th Street', charindex('Flat ','Flat 123 5th Street') + 5, len ('Flat 123 5th Street'))))
它返回了
123 5th Street
现在我必须找到是否在下一次出现空格之前,我有一个数值。
如果是Numeric,则将其删除,否则将其保留。
任何人都可以帮忙。
此致 HEMA
是的Marc_S,我应该这样做(已编辑)。 我不能用任何其他语言做。假设只在T-SQL中完成。
嗨LittleBobbyTales,谢谢你的回答。 实际上它不是标准格式,我可能只有 Flat 123
或第五街第一街123号
或第1主单位1
没有规则我们在单词Flat之后会有1个数字或2个数字。 可能有也可能没有数字。
它可以是任何一种方式。
答案 0 :(得分: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