Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Prosedur PL/SQL:UPDATE nama huruf besar ke initcaps, dengan penanganan khusus untuk beberapa nilai

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara menduplikasi hasil sql saya?

  2. klausa WHERE dalam OPEN QUERY

  3. Baris dengan nilai terbaru menurut pelanggan dan bulan

  4. SQLException:Pelanggaran Protokol di Oracle

  5. Keamanan Database Oracle:Audit Database