Trong Oracle, NLS_INITCAP()
hàm trả về đối số của nó với chữ cái đầu tiên của mỗi từ là chữ hoa và tất cả các chữ cái khác ở dạng chữ thường.
Tuy nhiên, cách viết hoa thực tế sẽ phụ thuộc vào đối chiếu được sử dụng. Ví dụ:nó có thể dẫn đến nhiều hơn chữ cái đầu tiên được viết hoa.
Nó tương tự như INITCAP()
, ngoại trừ việc nó chấp nhận đối số thứ hai cho phép bạn chỉ định đối chiếu. Đối chiếu xử lý các yêu cầu ngôn ngữ đặc biệt cho các chuyển đổi trường hợp.
Cú pháp
Cú pháp như sau:
NLS_INITCAP(char [, 'nlsparam' ])
Trong đó cả char
và 'nlsparam'
có thể là bất kỳ kiểu dữ liệu nào CHAR
, VARCHAR2
, NCHAR
hoặc NVARCHAR2
.
'nlsparam'
đối số có thể có dạng sau:
'NLS_SORT = sort'
Vị trí sort
là một đối chiếu được đặt tên.
Nếu bạn bỏ qua đối số này, đối chiếu đã xác định của hàm sẽ được sử dụng.
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh:
SELECT NLS_INITCAP('the lake')
FROM DUAL;
Kết quả:
NLS_INITCAP('THELAKE') _________________________ The Lake
Chỉ định một đối chiếu
Dưới đây là một ví dụ chứng minh cách chỉ định đối chiếu có thể thay đổi kết quả:
SELECT
NLS_INITCAP('het ijsselmeer') AS c1,
NLS_INITCAP('het ijsselmeer', 'NLS_SORT = XDutch') AS c2
FROM DUAL;
Kết quả:
C1 C2 _________________ _________________ Het Ijsselmeer Het IJsselmeer
Lưu ý rằng trong cột thứ hai, hai chữ cái đầu tiên của IJsselmeer được viết hoa, trong khi cột đầu tiên chỉ viết hoa chữ cái đầu tiên.
Trong tiếng Hà Lan, ij được coi là một chữ cái và do đó, cả hai ký tự đều được viết hoa khi chúng xuất hiện ở đầu câu hoặc tên riêng.
Lưu ý rằng NLS_SORT
chỉ ghi đè đối chiếu của đối số đầu tiên tại thời điểm thực thi. Do đó, câu lệnh sau trả về đối chiếu của đối số đầu tiên, không phải đối số thứ hai:
SELECT
COLLATION(NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDutch')) AS Collation
FROM DUAL;
Kết quả:
COLLATION _________________ USING_NLS_COMP
Chủ đề của collations có thể khá phức tạp. Xem Phụ lục C trong Hướng dẫn hỗ trợ toàn cầu hóa cơ sở dữ liệu Oracle để biết các quy tắc xác định đối chiếu và quy tắc dẫn xuất đối chiếu cho chức năng này.
Điều gì sẽ xảy ra nếu tôi vượt qua tất cả các chữ cái UPPERCASE?
Việc chuyển tất cả các chữ cái viết hoa không làm thay đổi kết quả:
SELECT
NLS_INITCAP('HET IJSSELMEER', 'NLS_SORT = XDutch') AS Result
FROM DUAL;
Kết quả:
RESULT _________________ Het IJsselmeer
Giá trị rỗng
Nếu bất kỳ đối số nào là null
, kết quả là null
:
SET NULL 'null';
SELECT
NLS_INITCAP('het IJsselmeer', null) AS r1,
NLS_INITCAP(null, 'NLS_SORT = XDutch') AS r2,
NLS_INITCAP(null, null) AS r3
FROM DUAL;
Kết quả:
R1 R2 R3 _______ _______ _______ null null null
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null
xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Số lượng đối số không chính xác
Gọi NLS_INITCAP()
mà không chuyển bất kỳ đối số nào sẽ trả về lỗi:
SELECT NLS_INITCAP()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT NLS_INITCAP() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Và việc chuyển sai số đối số dẫn đến lỗi:
SELECT NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDUTCH', 3)
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT NLS_INITCAP('het IJsselmeer', 'NLS_SORT = XDUTCH', 3) FROM DUAL Error at Command Line : 1 Column : 59 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: