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.