การต่อสตริงหลายคอลัมน์ด้วย CONCAT และ CONCAT_WS
วิธีที่ 1: CONCAT() - ระบุ Separator เอง
SELECT CONCAT(col1, '/', col2, '/', col3, '/', col4) AS combined FROM yourTable;
วิธีที่ 2: CONCAT_WS() - With Separator (แนะนำ)
SELECT CONCAT_WS('/', col1, col2, col3, col4) AS combined FROM yourTable;
ความแตกต่างสำคัญ
| คุณสมบัติ | CONCAT | CONCAT_WS |
|---|---|---|
| Separator | ต้องใส่เองทุกครั้ง | ระบุครั้งแรกอาร์กิวเมนต์เดียว |
| NULL handling | คืน NULL หากมี NULL ใดๆ | ข้าม NULL ไป (skip) |
| Empty string | รวมเข้าไป | รวมเข้าไป (ไม่ใช่ NULL) |
ตัวอย่างการใช้งาน
สร้างตาราง:
CREATE TABLE MoreThan2ColumnConcat (
Id INT,
Name VARCHAR(20),
Age INT,
Marks INT
);
เพิ่มข้อมูล:
INSERT INTO MoreThan2ColumnConcat VALUES(1, 'John', 24, 89);
INSERT INTO MoreThan2ColumnConcat VALUES(11, 'Larry', 25, 90);
INSERT INTO MoreThan2ColumnConcat VALUES(15, 'Mike', 26, 79);
INSERT INTO MoreThan2ColumnConcat VALUES(16, 'Sam', 21, 99);
ใช้ CONCAT:
SELECT CONCAT(Id, '/', Name, '/', Age, '/', Marks) AS ConcatMoreFields
FROM MoreThan2ColumnConcat;
ใช้ CONCAT_WS:
SELECT CONCAT_WS('/', Id, Name, Age, Marks) AS ConcatMoreFields
FROM MoreThan2ColumnConcat;
ผลลัพธ์ทั้งคู่เหมือนกัน (ไม่มี NULL):
+------------------+
| ConcatMoreFields |
+------------------+
| 1/John/24/89 |
| 11/Larry/25/90 |
| 15/Mike/26/79 |
| 16/Sam/21/99 |
+------------------+
ตัวอย่างมี NULL (เห็นความแตกต่างชัด)
INSERT INTO MoreThan2ColumnConcat VALUES(20, 'Test', NULL, 100);
-- CONCAT: คืน NULL ทั้งแถว
SELECT CONCAT(Id, '/', Name, '/', Age, '/', Marks) FROM MoreThan2ColumnConcat WHERE Id = 20;
-- NULL
-- CONCAT_WS: ข้าม NULL
SELECT CONCAT_WS('/', Id, Name, Age, Marks) FROM MoreThan2ColumnConcat WHERE Id = 20;
-- '20/Test/100'
การประยุกต์ใช้
- สร้าง CSV export
- สร้าง Composite Key string
- Full-text search concatenation
- Display formatting
คำแนะนำ
ใช้ CONCAT_WS เป็นหลัก เพราะจัดการ NULL ได้ดีกว่า และโค้ดอ่านง่ายกว่า