Zakładając, że specjalna obsługa jest konieczna tylko dla nazw takich jak 'S...
, dodając prosty REPLACE
powinno działać. BTW, nie potrzebujesz dwóch oddzielnych UPDATE
instrukcje - INITCAP
automatycznie skonwertuje znaki inne niż początkowe na małe litery.:
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
Spowoduje to zastąpienie wszystkich wystąpień 'S
z 's
. Jeśli potrzebujesz zająć się również innymi przypadkami, proponuję spróbować REGEXP_REPLACE()
.
Funkcja NLS_INITCAP
pomaga w niektórych kwestiach związanych z globalizacją. Na przykład pisuje zarówno I
i J
w IJSLAND
. Ale to nie pomaga w przypadku 'S
nazwy. Nie jestem pewien, czy jest to błąd w funkcjach globalizacji Oracle, czy te wszystkie nazwy miast są wyjątkami.