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

MySQL: รวมคอลัมน์ทั้งหมดเป็นคอลัมน์เดียวด้วย CONCAT

การต่อสตริง (Concatenate) คอลัมน์หลายคอลัมน์ให้เป็นคอลัมน์เดียว

ใช้ CONCAT() รวมค่าจากหลายคอลัมน์ เป็นสตริงเดียวในผลลัพธ์ SELECT

สร้างตารางและข้อมูล

mysql> create table DemoTable1396 (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(40),
    -> Age int
    -> );
Query OK, 0 rows affected (0.93 sec)

mysql> insert into DemoTable1396(Name, Age) values('Chris', 21);
mysql> insert into DemoTable1396(Name, Age) values('David', 24);
mysql> insert into DemoTable1396(Name, Age) values('Bob', 26);

ข้อมูลต้นฉบับ

+----+-------+------+
| Id | Name  | Age  |
+----+-------+------+
| 1  | Chris | 21   |
| 2  | David | 24   |
| 3  | Bob   | 26   |
+----+-------+------+

คำสั่ง CONCAT รวมคอลัมน์

mysql> select Id, Name, Age, concat(Id, Name, Age) as AllColumns 
    -> from DemoTable1396;

ผลลัพธ์

+----+-------+------+------------+
| Id | Name  | Age  | AllColumns |
+----+-------+------+------------+
| 1  | Chris | 21   | 1Chris21   |
| 2  | David | 24   | 2David24   |
| 3  | Bob   | 26   | 3Bob26     |
+----+-------+------+------------+

เพิ่ม Separator ให้อ่านง่าย

SELECT Id, Name, Age, 
       CONCAT(Id, ' | ', Name, ' | ', Age) AS AllColumns
FROM DemoTable1396;

ผลลัพธ์: 1 | Chris | 21

ฟังก์ชัน CONCAT_WS (With Separator)

CONCAT_WS(' | ', Id, Name, Age)

ข้าม NULL อัตโนมัติ (CONCAT ธรรมดาจะคืน NULL หากมีค่า NULL ใดๆ)

การจัดการ NULL

SELECT CONCAT(Id, Name, Age)           -- NULL หาก Age เป็น NULL
SELECT CONCAT(Id, Name, COALESCE(Age, ''))  -- จัดการ NULL เอง
SELECT CONCAT_WS(' ', Id, Name, Age)   -- ข้าม NULL เอง (แนะนำ)

กรณีใช้งานจริง

  • สร้าง display name: CONCAT(first_name, ' ', last_name)
  • สร้าง slug/URL: CONCAT(LOWER(REPLACE(title, ' ', '-')), '-', id)
  • Export CSV: CONCAT_WS(',', col1, col2, col3)
  • Log/Audit: CONCAT('User ', user_id, ' updated ', table_name)