การตรวจสอบ Timestamp ที่ตั้งค่าแล้ว
ใน MySQL TIMESTAMP ที่ไม่ได้ตั้งค่า (Zero timestamp) จะเป็น '0000-00-00 00:00:00' ใช้ WHERE timestamp_col > 0 กรองเฉพาะที่ตั้งค่าแล้ว
ตัวอย่าง
mysql> create table DemoTable855(DueDate timestamp);
Query OK, 0 rows affected (0.54 sec)
mysql> insert into DemoTable855 values('2019-08-07');
mysql> insert into DemoTable855 values('0000-00-00');
mysql> insert into DemoTable855 values('2019-07-06');
mysql> insert into DemoTable855 values('2016-04-10');
คำสั่งตรวจสอบ
mysql> select * from DemoTable855 where DueDate > 0;
ผลลัพธ์ (ตัดแถว 0000-00-00 ออก):
+----------------------+
| DueDate |
+----------------------+
| 2019-08-07 00:00:00 |
| 2019-07-06 00:00:00 |
| 2016-04-10 00:00:00 |
+----------------------+
วิธีอื่นๆ
-- ใช้ IS NOT NULL (ถ้าอนุญาต NULL)
WHERE DueDate IS NOT NULL
-- ใช้ != '0000-00-00'
WHERE DueDate != '0000-00-00'
-- ใช้ YEAR() > 0
WHERE YEAR(DueDate) > 0
⚠️ ข้อควรระวัง: SQL Mode
- ถ้าเปิด
NO_ZERO_DATEจะไม่สามารถ INSERT '0000-00-00' ได้ (Error) - MySQL 5.7+ Default เปิด NO_ZERO_DATE แล้ว
- แนะนำให้ใช้
NULLแทน Zero timestamp สำหรับ "ไม่มีค่า"
สรุป
ใช้ WHERE timestamp_col > 0 หรือ WHERE timestamp_col != '0000-00-00' กรอง Timestamp ที่ตั้งค่าแล้ว แนะนำให้ใช้ NULL แทน Zero date