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

อัปเดตข้อมูลวันที่ที่มีค่า NULL ใน MySQL ด้วย IFNULL()

บทนำ

เมื่อต้องการจัดเรียงหรือเลือกข้อมูลวันที่ โดยให้ค่า NULL ใช้ค่าสำรอง (Fallback) จากคอลัมน์อื่น สามารถใช้ IFNULL() หรือ COALESCE() ในคำสั่ง ORDER BY หรือ WHERE

ตัวอย่างการสร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (
    -> AddedDate DATE,
    -> UpdatedDate DATE
    -> );
Query OK, 0 rows affected (0.95 sec)
mysql> INSERT INTO DemoTable VALUES('2019-01-10', '2019-06-01');
mysql> INSERT INTO DemoTable VALUES('2019-05-19', NULL);
mysql> INSERT INTO DemoTable VALUES(NULL, '2019-09-05');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+------------+--------------+
| AddedDate  | UpdatedDate  |
+------------+--------------+
| 2019-01-10 | 2019-06-01   |
| 2019-05-19 | NULL         |
| NULL       | 2019-09-05   |
+------------+--------------+
3 rows in set (0.00 sec)

กรณีที่ 1: เรียงลำดับจากใหม่ไปเก่า (DESC) - ใช้ UpdatedDate ถ้ามี ไม่งั้น AddedDate

mysql> SELECT * FROM DemoTable
    -> ORDER BY IFNULL(UpdatedDate, AddedDate) DESC;

ผลลัพธ์

+------------+--------------+
| AddedDate  | UpdatedDate  |
+------------+--------------+
| NULL       | 2019-09-05   |  -- ใช้ UpdatedDate (09-05)
| 2019-01-10 | 2019-06-01   |  -- ใช้ UpdatedDate (06-01)
| 2019-05-19 | NULL         |  -- ใช้ AddedDate (05-19)
+------------+--------------+
3 rows in set (0.00 sec)

กรณีที่ 2: เรียงลำดับจากเก่าไปใหม่ (ASC)

mysql> SELECT * FROM DemoTable
    -> ORDER BY IFNULL(UpdatedDate, AddedDate);

ผลลัพธ์

+------------+--------------+
| AddedDate  | UpdatedDate  |
+------------+--------------+
| 2019-05-19 | NULL         |  -- ใช้ AddedDate (05-19)
| 2019-01-10 | 2019-06-01   |  -- ใช้ UpdatedDate (06-01)
| NULL       | 2019-09-05   |  -- ใช้ UpdatedDate (09-05)
+------------+--------------+
3 rows in set (0.00 sec)

คำอธิบาย

  • IFNULL(UpdatedDate, AddedDate) คืนค่า UpdatedDate ถ้าไม่ใช่ NULL, ไม่งั้น AddedDate
  • เหมาะสำหรับระบบ Audit Log: ใช้ UpdatedDate เป็นหลัก, AddedDate เป็นสำรอง
  • COALESCE(UpdatedDate, AddedDate, '1970-01-01') ใช้ได้หากมีคอลัมน์สำรองมากกว่า 1