Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

รวมคอลัมน์มากกว่า 2 คอลัมน์ใน SQL ด้วย CONCAT และ CONCAT_WS

การต่อสตริงหลายคอลัมน์ด้วย 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;

ความแตกต่างสำคัญ

คุณสมบัติCONCATCONCAT_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 ได้ดีกว่า และโค้ดอ่านง่ายกว่า