Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL-'08:Czy wielokrotne instrukcje Replace to zła praktyka/czy istnieje inny sposób napisania tego zapytania?

Zagnieżdżone zastępowanie jest w porządku, ale wraz ze wzrostem poziomu zagnieżdżenia czytelność kodu spada. Gdybym miał dużą liczbę znaków do zastąpienia, wybrałbym coś czystszego, takiego jak podejście oparte na poniższej tabeli.

    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]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Minimalnie zalogowany Wstaw do

  2. Korzystanie z liczby wierszy z tabeli tymczasowej w pętli while SQL Server 2008

  3. SQL UPDATE nie działa z językami obcymi (arabski)

  4. Ustaw wartość początkową dla kolumny z autoinkrementacją

  5. Jak formatować liczby w SQL Server