Giả sử việc xử lý đặc biệt chỉ cần thiết đối với các tên như 'S ...
, thêm một REPLACE
đơn giản nên làm việc. BTW, bạn không cần hai UPDATE
riêng biệt câu lệnh - INITCAP
sẽ tự động chuyển đổi các ký tự không phải ký tự đầu tiên thành chữ thường.:
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
Điều này sẽ thay thế tất cả các lần xuất hiện của 'S
với của . Nếu bạn cũng cần xử lý các trường hợp khác, tôi khuyên bạn nên thử
REGEXP_REPLACE ()
.
Hàm NLS_INITCAP
giúp giải quyết một số vấn đề toàn cầu hóa. Ví dụ:nó viết hoa cả I
và J
trong IJSLAND
. Nhưng nó không hữu ích với 'S
những cái tên. Tôi không chắc đó có phải là lỗi với các chức năng toàn cầu hóa của Oracle hay không hay những tên thành phố đó đều là ngoại lệ.