Trong Oracle, CONCAT()
hàm thực hiện nối chuỗi trên các đối số của nó. Nó trả về chuỗi là kết quả của việc nối các đối số của nó.
Nối là hoạt động nối nhiều chuỗi từ đầu đến cuối.
Cú pháp
Cú pháp như sau:
CONCAT(char1, char2)
Trong đó cả hai đối số có thể là bất kỳ kiểu dữ liệu nào CHAR
, VARCHAR2
, NCHAR
, NVARCHAR2
, CLOB
hoặc NCLOB
.
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh:
SELECT CONCAT('Ponzi', 'Invest')
FROM DUAL;
Kết quả:
CONCAT('PONZI','INVEST') ___________________________ PonziInvest
Giá trị rỗng
Nối một chuỗi với null
trả về chuỗi:
SET NULL 'null';
SELECT
CONCAT('Ponzi', null),
CONCAT(null, 'Invest')
FROM DUAL;
Kết quả:
CONCAT('PONZI',NULL) CONCAT(NULL,'INVEST') _______________________ ________________________ Ponzi Invest
Nhưng nếu cả hai đối số đều null
, kết quả là null
:
SET NULL 'null';
SELECT CONCAT(null, null)
FROM DUAL;
Kết quả:
CONCAT(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
Đang gọi CONCAT()
mà không chuyển bất kỳ đối số nào sẽ trả về lỗi:
SELECT CONCAT()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT CONCAT() 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 CONCAT('Gosh', 'Dang', 'Investments')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT CONCAT('Gosh', 'Dang', 'Investments') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action:
Bộ ký tự &kiểu dữ liệu
Chuỗi kết quả có cùng bộ ký tự với đối số đầu tiên, tuy nhiên kiểu dữ liệu của nó phụ thuộc vào kiểu dữ liệu của đối số.
Khi nối hai kiểu dữ liệu khác nhau, Cơ sở dữ liệu Oracle trả về kiểu dữ liệu dẫn đến chuyển đổi không mất dữ liệu. Do đó, nếu một trong các đối số là LOB, thì giá trị trả về là LOB. Nếu một trong các đối số là kiểu dữ liệu quốc gia thì giá trị trả về là kiểu dữ liệu quốc gia.
Ví dụ:
-
CONCAT
(CLOB
,NCLOB
) trả vềNCLOB
-
CONCAT
(NCLOB
,NCHAR
) trả vềNCLOB
-
CONCAT
(NCLOB
,CHAR
) trả vềNCLOB
-
CONCAT
(NCHAR
,CLOB
) trả vềNCLOB