Assumindo que o tratamento especial é necessário apenas para nomes como
'S...
, adicionando um simples REPLACE
Deveria trabalhar. BTW, você não precisa de dois UPDATE
separados instruções - INITCAP
converterá automaticamente caracteres não iniciais em minúsculas.: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
Isso substituirá todas as ocorrências de
'S
com 's
. Se você também precisa lidar com outros casos, sugiro que tente REGEXP_REPLACE()
. A função
NLS_INITCAP
ajuda com alguns problemas de globalização. Por exemplo, ele capitaliza tanto o I
e o J
em IJSLAND
. Mas não ajuda com 'S
nomes. Não tenho certeza se isso é um bug com as funções de globalização da Oracle ou se esses nomes de cidades são exceções.