En supposant que le traitement spécial n'est nécessaire que pour les noms comme 'S...
, en ajoutant un simple REPLACE
devrait marcher. BTW, vous n'avez pas besoin de deux UPDATE
distincts instructions - INITCAP
convertira automatiquement les caractères non initiaux en minuscules. :
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
Cela remplacera toutes les occurrences de 'S
avec 's
. Si vous devez également gérer d'autres cas, je vous suggère d'essayer REGEXP_REPLACE()
.
La fonction NLS_INITCAP
aide à résoudre certains problèmes de mondialisation. Par exemple, il capitalise à la fois le I
et le J
dans IJSLAND
. Mais cela n'aide pas avec 'S
des noms. Je ne sais pas s'il s'agit d'un bogue avec les fonctions de globalisation d'Oracle ou si ces noms de villes sont tous des exceptions.