Asumiendo que el manejo especial es necesario solo para nombres como 'S...
, agregando un simple REPLACE
Deberia trabajar. Por cierto, no necesitas dos UPDATE
separados sentencias - INITCAP
convertirá automáticamente los caracteres no iniciales a 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
Esto reemplazará todas las apariciones de 'S
con 's
. Si también necesita manejar otros casos, le sugiero que pruebe REGEXP_REPLACE()
.
La función NLS_INITCAP
ayuda con algunos problemas de globalización. Por ejemplo, escribe en mayúscula tanto la I
y el J
en IJSLAND
. Pero no ayuda con 'S
nombres No estoy seguro de si se trata de un error con las funciones de globalización de Oracle o si esos nombres de ciudades son todas excepciones.