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

แปลงค่า NULL เป็น 0 ใน MySQL ด้วย IFNULL() และ COALESCE()

เมื่อต้องการแสดงค่า 0 แทนค่า NULL ในผลลัพธ์ ให้ใช้ฟังก์ชัน IFNULL() หรือ COALESCE()

IFNULL() - สำหรับคอลัมน์เดียว

SELECT IFNULL(yourColumnName, 0) AS anyVariableName 
FROM yourTableName;

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

1. สร้างตารางและเพิ่มข้อมูลที่มี NULL

mysql> CREATE TABLE TypecastDemo (
    -> AccountNumber INT
    -> );
Query OK, 0 rows affected (0.84 sec)

mysql> INSERT INTO TypecastDemo VALUES (NULL);
mysql> INSERT INTO TypecastDemo VALUES (1234);
mysql> INSERT INTO TypecastDemo VALUES (9876);
mysql> INSERT INTO TypecastDemo VALUES (6666);
mysql> INSERT INTO TypecastDemo VALUES (NULL);
mysql> INSERT INTO TypecastDemo VALUES (NULL);
mysql> INSERT INTO TypecastDemo VALUES (3214);

2. ดูข้อมูลดิบ

mysql> SELECT * FROM TypecastDemo;
+---------------+
| AccountNumber |
+---------------+
| NULL          |
| 1234          |
| 9876          |
| 6666          |
| NULL          |
| NULL          |
| 3214          |
+---------------+
7 rows in set (0.00 sec)

3. แปลง NULL เป็น 0

mysql> SELECT IFNULL(AccountNumber, 0) AS TypeCastNullToZero 
    -> FROM TypecastDemo;
+--------------------+
| TypeCastNullToZero |
+--------------------+
| 0                  |
| 1234               |
| 9876               |
| 6666               |
| 0                  |
| 0                  |
| 3214               |
+--------------------+
7 rows in set (0.00 sec)

COALESCE() - สำหรับหลายคอลัมน์หรือหลายค่า

SELECT COALESCE(col1, col2, col3, 0) AS result FROM table_name;

COALESCE จะคืนค่าแรกที่ไม่ใช่ NULL จากซ้ายไปขวา หากทุกค่าเป็น NULL จะคืนค่าสุดท้าย (0 ในตัวอย่าง)

ความแตกต่างระหว่าง IFNULL และ COALESCE

คุณสมบัติIFNULLCOALESCE
จำนวนอาร์กิวเมนต์2 ตัวเท่านั้น2 ตัวขึ้นไป
มาตรฐาน ANSI SQLไม่ใช่ (MySQL proprietary)ใช่ (Standard SQL)
ประสิทธิภาพเร็วกว่าเล็กน้อยช้ากว่าเล็กน้อย

แนวทางเลือก: ใช้ IFNULL สำหรับกรณีง่ายๆ 1 คอลัมน์ ใช้ COALESCE เมื่อต้องตรวจสอบหลายคอลัมน์หรือต้องการความเข้ากันได้กับฐานข้อมูลอื่น