sql >> Database >  >> RDS >> Oracle

PL/SQL-procedure:UPDATE namen in hoofdletters naar initcaps, met speciale behandeling voor sommige waarden

Ervan uitgaande dat de speciale behandeling alleen nodig is voor namen als 'S... , het toevoegen van een eenvoudige REPLACE zou moeten werken. Trouwens, je hebt geen twee aparte UPDATE nodig verklaringen - INITCAP converteert automatisch niet-initiële tekens naar kleine letters.:

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

Dit vervangt alle exemplaren van 'S met 's . Als u ook andere zaken moet behandelen, raad ik u aan REGEXP_REPLACE() te proberen .

De functie NLS_INITCAP helpt bij sommige globaliseringsproblemen. Het zet bijvoorbeeld zowel de I en de J in IJSLAND . Maar het helpt niet met 'S namen. Ik weet niet zeker of dat een bug is met de globaliseringsfuncties van Oracle of dat die plaatsnamen allemaal uitzonderingen zijn.



  1. JAXB 2 in een Oracle 10g Webapp

  2. MySQL:Inner join vs Where

  3. Hoe de CHAR()-functie werkt in SQL Server (T-SQL)

  4. post hernoemde bestandsnaam van upload naar database