Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL-'08:più istruzioni Sostituisci sono una cattiva pratica/c'è un altro modo per scrivere questa query?

La sostituzione nidificata va bene, ma all'aumentare del livello di nidificazione, la leggibilità del codice diminuisce. Se avessi un gran numero di caratteri da sostituire, opterei per qualcosa di più pulito come l'approccio basato sulla tabella sottostante.

    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]