我应该从地址字段中删除以下内容。

  • 将所有名为“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号

    现在,我必须查找在下一次出现空格之前是否有数字值。

    如果为数字,则将其删除,否则将其保留。

    谁能帮忙。

    问候,
    赫玛

    是的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
    

    10-05 22:57
    查看更多