Za předpokladu, že speciální zpracování je nutné pouze pro názvy jako 'S...
, přidáním jednoduchého REPLACE
měl by pracovat. BTW, nepotřebujete dva samostatné UPDATE
příkazy - INITCAP
automaticky převede jiné než počáteční znaky na malá písmena.:
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
To nahradí všechny výskyty 'S
s 's
. Pokud potřebujete řešit i jiné případy, doporučuji zkusit REGEXP_REPLACE()
.
Funkce NLS_INITCAP
pomáhá s některými globalizačními problémy. Například, píše velkými písmeny jak I
a J
v IJSLAND
. Ale to nepomůže s 'S
jména. Nejsem si jistý, zda se jedná o chybu globalizačních funkcí Oracle, nebo zda jsou tyto názvy měst výjimkou.