Tóm tắt
Mặc định MySQL dùng CONCAT() hoặc || là OR logic. Bật sql_mode = PIPES_AS_CONCAT để || thành toán tử nối chuỗi (như Oracle, PostgreSQL).
Cú pháp
SET sql_mode = PIPES_AS_CONCAT;
SELECT 'Good Morning !!! ' || Name AS PipeConcatenationDemo FROM bang;
Ví dụ
1. Tạo bảng
CREATE TABLE PipeConcatDemo (Name VARCHAR(20));
INSERT INTO PipeConcatDemo VALUES ('Larry'), ('John'), ('Maxwell'), ('Bob');
2. Bật mode và nối
SET sql_mode = PIPES_AS_CONCAT;
SELECT 'Good Morning !!! ' || Name AS PipeConcatenationDemo FROM PipeConcatDemo;
3. Kết quả
+--------------------------+
| PipeConcatenationDemo |
+--------------------------+
| Good Morning !!! Larry |
| Good Morning !!! John |
| Good Morning !!! Maxwell |
| Good Morning !!! Bob |
+--------------------------+
Lưu ý quan trọng
PIPES_AS_CONCATlà **session-level** – mất khi reconnect. Để vĩnh viễn: thêm vào my.cnfsql_mode=...,PIPES_AS_CONCAT.- Khi bật,
||**không còn là OR logic** – phải dùngORtừ khóa. - Tương thích ứng dụng chuyển từ Oracle/PostgreSQL.
- Khuyến nghị: dùng
CONCAT()hoặcCONCAT_WS()chuẩn MySQL, không phụ thuộc sql_mode.
So sánh
| Cách | Cú pháp | Ưu điểm | Nhược điểm |
|---|---|---|---|
| CONCAT | CONCAT(a, b, c) | Chuẩn, luôn hoạt động | Dài hơn |
| CONCAT_WS | CONCAT_WS(',', a, b, c) | Tự bỏ NULL, có separator | Chỉ dùng cho join với separator |
| || (PIPES_AS_CONCAT) | a || b || c | Ngắn, quen Oracle/PG | Cần set sql_mode, không portable |