Supponendo che la gestione speciale sia necessaria solo per nomi come 'S...
, aggiungendo un semplice REPLACE
dovrebbe funzionare. A proposito, non hai bisogno di due UPDATE
separati istruzioni - INITCAP
convertirà automaticamente i caratteri non iniziali in minuscolo.:
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
Questo sostituirà tutte le occorrenze di 'S
con 's
. Se hai bisogno di gestire anche altri casi, ti suggerisco di provare REGEXP_REPLACE()
.
La funzione NLS_INITCAP
aiuta con alcuni problemi di globalizzazione. Ad esempio, mette in maiuscolo sia la I
e il J
in IJSLAND
. Ma non aiuta con 'S
nomi. Non sono sicuro se si tratti di un bug con le funzioni di globalizzazione di Oracle o se quei nomi di città siano tutte eccezioni.