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.