Dengan asumsi penanganan khusus hanya diperlukan untuk nama seperti 'S... , menambahkan REPLACE simple sederhana harus bekerja. BTW, Anda tidak perlu dua UPDATE yang terpisah pernyataan - INITCAP akan secara otomatis mengonversi karakter non-awal menjadi huruf kecil.:
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
Ini akan menggantikan semua kemunculan 'S dengan 's . Jika Anda perlu menangani kasus lain juga, saya sarankan Anda mencoba REGEXP_REPLACE() .
Fungsi NLS_INITCAP
membantu dengan beberapa masalah globalisasi. Misalnya, huruf besar I dan J di IJSLAND . Tapi itu tidak membantu dengan 'S nama. Saya tidak yakin apakah itu bug dengan fungsi globalisasi Oracle atau apakah semua nama kota tersebut merupakan pengecualian.