sql >> Database teknologi >  >> RDS >> Oracle

PL/SQL-procedure:OPDATERING af store bogstaver til initcaps, med speciel håndtering for nogle værdier

Forudsat at den særlige håndtering kun er nødvendig for navne som 'S... , ved at tilføje en simpel REPLACE burde virke. BTW, du behøver ikke to separate UPDATE udsagn - INITCAP vil automatisk konvertere ikke-indledende tegn til små bogstaver.:

with v_data(name) as (
  select 'AMSTERDAM' from dual union all
  select '''S GRAVENHAGE' from dual union all
  select 'DEN HAAG' from dual union all
  select 'IJSLAND' from dual
  )
select 
  replace(nls_initcap(name, 'NLS_SORT=xDutch'), '''S', '''s') name
from v_data

Name
----
Amsterdam
's Gravenhage
Den Haag
IJsland

Dette vil erstatte alle forekomster af 'S med 's . Hvis du også har brug for at håndtere andre sager, foreslår jeg, at du prøver REGEXP_REPLACE() .

Funktionen NLS_INITCAP hjælper med nogle globaliseringsproblemer. For eksempel bruger den både I med stort og J i IJSLAND . Men det hjælper ikke med 'S navne. Jeg er ikke sikker på, om det er en fejl med Oracles globaliseringsfunktioner, eller om disse bynavne alle er undtagelser.



  1. Hvordan konverteres en MySQL DB til XML?

  2. JDBC Metada henter begrænsningsoplysninger

  3. Database API:Sådan håndterer du multi where-tilstand i Python

  4. InnoDB tager over en time at importere 600MB fil, MyISAM på få minutter