ใช้ IFNULL() หรือ COALESCE() แปลงค่า NULL เป็น 0 (หรือค่าเริ่มต้นอื่น)
ไวยากรณ์
SELECT IFNULL(yourColumnName, 0) AS anyAliasName FROM yourTableName; SELECT COALESCE(yourColumnName, 0) AS anyAliasName FROM yourTableName;
สร้างตารางตัวอย่าง
mysql> CREATE TABLE convertNullToZeroDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20),
-> Salary INT
-> );
เพิ่มข้อมูลตัวอย่าง (มี NULL)
mysql> INSERT INTO convertNullToZeroDemo(Name, Salary) VALUES
('John', NULL), ('Carol', 5610), ('Bob', NULL), ('David', NULL);
แสดงข้อมูลก่อน
mysql> SELECT * FROM convertNullToZeroDemo;
ผลลัพธ์:
+----+-------+--------+ | Id | Name | Salary | +----+-------+--------+ | 1 | John | NULL | | 2 | Carol | 5610 | | 3 | Bob | NULL | | 4 | David | NULL | +----+-------+--------+
วิธีที่ 1: IFNULL() (MySQL เฉพาะ)
mysql> SELECT IFNULL(Salary, 0) AS CONVERT_NULL_TO_0 FROM convertNullToZeroDemo;
ผลลัพธ์:
+--------------------+ | CONVERT_NULL_TO_0 | +--------------------+ | 0 | | 5610 | | 0 | | 0 | +--------------------+
วิธีที่ 2: COALESCE() (มาตรฐาน ANSI SQL)
mysql> SELECT COALESCE(Salary, 0) AS CONVERT_NULL_TO_0 FROM convertNullToZeroDemo;
ผลลัพธ์:
+--------------------+ | CONVERT_NULL_TO_0 | +--------------------+ | 0 | | 5610 | | 0 | | 0 | +--------------------+
เปรียบเทียบ IFNULL vs COALESCE
| คุณสมบัติ | IFNULL(expr1, expr2) | COALESCE(expr1, expr2, ...) |
|---|---|---|
| พารามิเตอร์ | 2 ตัวเท่านั้น | 2 ตัวขึ้นไป |
| มาตรฐาน | MySQL proprietary | ANSI SQL Standard |
| พกพา (Portable) | ไม่ได้ (MySQL only) | ได้ (PostgreSQL, SQL Server, Oracle, SQLite) |
| ประสิทธิภาพ | เร็วกว่าเล็กน้อย | ช้ากว่าเล็กน้อย (น้อยมาก) |
| การประเมินค่า | ประเมิน expr1 1 ครั้ง | ประเมินตามลำดับจนกว่าจะเจอ non-NULL |
ตัวอย่าง COALESCE หลายพารามิเตอร์
-- เลือกค่าแรกที่ไม่ใช่ NULL จาก phone, mobile, email, แล้วค่อย 'N/A' SELECT COALESCE(phone, mobile, email, 'N/A') AS contact FROM users;
แนวทางเลือกใช้
- โปรเจกต์ MySQL เท่านั้น ต้องการความเร็วสูงสุด:
IFNULL() - โปรเจกต์อาจย้าย DB หรือต้องการมาตรฐาน:
COALESCE() - ต้องตรวจสอบหลายคอลัมน์/ค่า:
COALESCE()เท่านั้น