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.