Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-'08:Sind mehrere Replace-Anweisungen eine schlechte Praxis/gibt es eine andere Möglichkeit, diese Abfrage zu schreiben?

Das verschachtelte Ersetzen ist in Ordnung, aber mit zunehmender Verschachtelungsebene nimmt die Lesbarkeit Ihres Codes ab. Wenn ich eine große Anzahl von Zeichen zu ersetzen hätte, würde ich mich für etwas Saubereres wie den folgenden tabellengesteuerten Ansatz entscheiden.

    declare @Category varchar(25)
    set @Category = 'ABC & DEF/GHI, LMN OP'
    -- nested replace
    select replace(replace(replace(replace(@Category, ' & ', '-'), '/', '-'), ', ', '-'), ' ', '-') as Department 

    -- table driven
    declare @t table (ReplaceThis varchar(10), WithThis varchar(10))
    insert into @t
        values  (' & ', '-'), 
                ('/', '-'),
                (', ', '-'),
                (' ', '-')

    select  @Category = replace(@Category, ReplaceThis, isnull(WithThis, ''))                       
    from    @t
    where   charindex(ReplaceThis, @Category) > 0;

    select @Category [Department]