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

รวมค่า (Concatenate) ใน MySQL และจัดการค่า NULL

การรวมข้อความและจัดการ NULL ด้วย CONCAT() และ IFNULL()

ใน MySQL ฟังก์ชัน CONCAT() จะคืนค่า NULL หากมีอาร์กิวเมนต์ใดเป็น NULL ใช้ IFNULL() หรือ COALESCE() เพื่อแทนที่ NULL ก่อนรวม

ไวยากรณ์

SELECT CONCAT('Prefix: ', IFNULL(yourColumn, 'Default Value')) AS Result FROM yourTableName;

ตัวอย่างการใช้งาน

สร้างตารางชื่อ:

CREATE TABLE ConcatValues (
    Id INT NOT NULL AUTO_INCREMENT,
    FirstName VARCHAR(20),
    MiddleName VARCHAR(20),
    LastName VARCHAR(20),
    PRIMARY KEY(Id)
);

เพิ่มข้อมูล (MiddleName บางรายการเป็น NULL):

INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('John', NULL, 'Smith');
INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('Carol', NULL, 'Taylor');
INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('David', NULL, 'Miller');
INSERT INTO ConcatValues(FirstName, MiddleName, LastName) VALUES('Mary', 'Elizabeth', 'Smith');

รวมชื่อพร้อมจัดการ NULL:

SELECT CONCAT('The middle name is: ', IFNULL(MiddleName, 'Not Available')) AS MiddleName
FROM ConcatValues;

ผลลัพธ์:

+----------------------------------+
| MiddleName                       |
+----------------------------------+
| The middle name is: Elizabeth    |
| The middle name is: Not Available|
| The middle name is: Not Available|
| The middle name is: Not Available|
+----------------------------------+

ฟังก์ชันจัดการ NULL อื่นๆ

ฟังก์ชันคำอธิบายตัวอย่าง
IFNULL(expr, val)MySQL เฉพาะ - คืนค่า val หาก expr เป็น NULLIFNULL(col, 'N/A')
COALESCE(v1, v2, ...)มาตรฐาน SQL - คืนค่าแรกที่ไม่ใช่ NULLCOALESCE(col1, col2, 'N/A')
NULLIF(expr1, expr2)คืนค่า NULL หาก expr1 = expr2NULLIF(col, '')

รวมหลายคอลัมน์พร้อมจัดการ NULL

-- ใช้ COALESCE สำหรับหลายคอลัมน์
SELECT CONCAT(
    COALESCE(FirstName, ''), ' ',
    COALESCE(MiddleName, ''), ' ',
    COALESCE(LastName, '')
) AS FullName FROM ConcatValues;

-- หรือใช้ CONCAT_WS (skip NULL อัตโนมัติ)
SELECT CONCAT_WS(' ', FirstName, MiddleName, LastName) AS FullName FROM ConcatValues;

ข้อแตกต่าง CONCAT vs CONCAT_WS

  • CONCAT - คืนค่า NULL หากมีอาร์กิวเมนต์ใดเป็น NULL
  • CONCAT_WS(separator, ...) - ข้าม NULL ไป โดยอัตโนมัติ ใส่ separator ระหว่างค่าที่ไม่ใช่ NULL