Trong MariaDB, CONCAT()
là một hàm chuỗi được tích hợp sẵn để 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 hai hoặc nhiều chuỗi từ đầu đến cuối.
CONCAT()
chấp nhận một hoặc nhiều đối số, tất cả đều được trả về dưới dạng một chuỗi được nối đơn lẻ.
Cú pháp
Cú pháp như sau:
CONCAT( str1, str2, ... )
Trong đó str1, str2, …
đại diện cho các đối số chuỗi để nối.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT CONCAT('Homer', 'Jay');
Kết quả:
+ ------------------------ + | CONCAT ('Homer', 'Jay') | + ------------------------ + | HomerJay | + ------------------------ +
Trong trường hợp này, chúng tôi đã nối hai chuỗi.
Đây là một lần nữa, nhưng lần này chúng tôi thêm một khoảng trắng ở giữa:
SELECT CONCAT('Homer', ' ', 'Jay');
Kết quả:
+ ----------------------------- + | CONCAT ('Homer', '', 'Jay') | + ----------------------------- + | Homer Jay | + ----------------------------- +
Trong trường hợp này, chúng tôi đã nối ba chuỗi.
Đây là với năm:
SELECT CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson');
Kết quả:
+ --------------------------------------------- + | CONCAT ('Homer', '', 'Jay', '', 'Simpson') | + ---------------------------- ----------------- + | Homer Jay Simpson | + --------------------------------------------- +
Chuỗi nhị phân
Nếu bất kỳ đối số nào là chuỗi nhị phân, kết quả là chuỗi nhị phân:
SELECT CONCAT(BINARY 'Homer', 'Jay');
Kết quả:
+ ------------------------------- + | CONCAT (BINARY 'Homer', 'Jay') | + ------------------------------- + | HomerJay | + ------------------------------- +
Chúng ta có thể sử dụng COLLATION()
chức năng kiểm tra sự đối chiếu của kết quả:
SELECT COLLATION(CONCAT(BINARY 'Homer', 'Jay'));
Kết quả:
+ ------------------------------------------ + | COLLATION (CONCAT (BINARY 'Homer', 'Jay')) | + ---------------------------------- -------- + | nhị phân | + ------------------------------------------ +
Nếu chúng tôi xóa BINARY
toán tử, chúng tôi nhận được một kết quả khác:
SELECT COLLATION(CONCAT('Homer', 'Jay'));
Kết quả:
+ ----------------------------------- + | COLLATION (CONCAT ('Homer', 'Jay')) | + ----------------------------------- + | utf8_general_ci | + ----------------------------------- +
Ngoài ra, theo tài liệu MariaDB, các đối số số được chuyển đổi sang dạng chuỗi nhị phân tương đương của chúng. Bạn có thể tránh điều này bằng cách truyền kiểu rõ ràng (sử dụng CAST()
hoặc CONVERT()
).
Đối số rỗng
Nếu bất kỳ đối số nào là null
, CONCAT()
trả về null
.
Tuy nhiên, có một ngoại lệ:Khi ở chế độ Oracle (tức là sql_mode=ORACLE
), bất kỳ null
nào các đối số chỉ đơn giản là bị bỏ qua.
Đầu tiên, hãy xem cách CONCAT()
hoạt động ở chế độ mặc định.
Đặt phiên của chúng tôi thành chế độ mặc định:
SET SESSION sql_mode=DEFAULT;
Bây giờ hãy chạy CONCAT()
với null
đối số:
SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Kết quả:
+ -------------------------------------------- + | CONCAT ('Homer', '', null, '', 'Simpson') | + ------------------------------ -------------- + | NULL | + -------------------------------------------- +Như mong đợi, kết quả là
null
.Bây giờ, hãy chuyển phiên của chúng ta sang chế độ Oracle:
SET SESSION sql_mode=ORACLE;
Và bây giờ chúng ta hãy chạy
CONCAT()
trước đó ví dụ một lần nữa:SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Kết quả:
+ -------------------------------------------- + | CONCAT ('Homer', '', null, '', 'Simpson') | + ------------------------------ -------------- + | Homer Simpson | + -------------------------------------------- +Lần này nó bỏ qua
null
và nối tất cả các đối số không phảinull
còn lại tranh luận. Nếu quan sát kỹ, bạn sẽ thấy rằng nó đã nối cả hai khoảng trắng, vì vậy có một khoảng trắng kép ở giữaHomer
vàSimpson
.Đối với một
null
- an toàn thay thế, sử dụngCONCAT_WS()
. Hàm đó bỏ quanull
giá trị, ngay cả khi không ở chế độ Oracle.Ngoài ra, bạn có thể sử dụng
IFNULL()
để cung cấp giá trị (chuỗi) thay thế chonull
giá trị (chẳng hạn như một chuỗi trống).Đối số đơn
Đang gọi
CONCAT()
chỉ với một đối số chỉ đơn giản trả về đối số đó:SELECT CONCAT('Homer');
Kết quả:
+ ----------------- + | CONCAT ('Homer') | + ----------------- + | Homer | + ----------------- +Thiếu đối số
Đang gọi
CONCAT()
mà không chuyển bất kỳ đối số nào dẫn đến lỗi:SELECT CONCAT();
Kết quả:
ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'CONCAT'