Förutsatt att den speciella hanteringen endast är nödvändig för namn som 'S...
, lägga till en enkel REPLACE
borde fungera. BTW, du behöver inte två separata UPDATE
uttalanden - INITCAP
konverterar automatiskt icke-initialtecken till gemener.:
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
Detta kommer att ersätta alla förekomster av 'S
med 's
. Om du behöver hantera andra fall också, föreslår jag att du försöker REGEXP_REPLACE()
.
Funktionen NLS_INITCAP
hjälper till med vissa globaliseringsfrågor. Till exempel använder den både I
med versaler och J
i IJSLAND
. Men det hjälper inte med 'S
namn. Jag är inte säker på om det är ett fel med Oracles globaliseringsfunktioner eller om dessa stadsnamn alla är undantag.