Giới thiệu
Giá trị zero của TIMESTAMP là '0000-00-00 00:00:00'. Để lọc các hàng có timestamp hợp lệ (đã set), dùng điều kiện DueDate > 0 (MySQL tự chuyển timestamp thành số giây từ epoch để so sánh).
Ví dụ thực hành
1. Tạo bảng DemoTable855
mysql> CREATE TABLE DemoTable855 (DueDate TIMESTAMP);
2. Chèn dữ liệu (có 1 hàng zero)
mysql> INSERT INTO DemoTable855 VALUES ('2019-08-07'),('0000-00-00'),('2019-07-06'),('2016-04-10');
3. Lọc timestamp > 0 (đã set)
mysql> SELECT * FROM DemoTable855 WHERE DueDate > 0;
4. Kết quả (loại bỏ hàng zero)
+----------------------+
| DueDate |
+----------------------+
| 2019-08-07 00:00:00 |
| 2019-07-06 00:00:00 |
| 2016-04-10 00:00:00 |
+----------------------+
Các cách kiểm tra khác
-- Cách rõ ràng, chuẩn SQL
WHERE DueDate != '0000-00-00 00:00:00'
WHERE DueDate IS NOT NULL AND DueDate != '0000-00-00 00:00:00'
-- Dùng hàm (MySQL 8.0+)
WHERE TIMESTAMP(DueDate) IS NOT NULL -- nhưng zero timestamp vẫn trả về zero, không phải NULL
⚠️ Cảnh báo về zero timestamp
- MySQL 5.7+ mặc định
NO_ZERO_DATESQL mode → chèn '0000-00-00' sẽ báo lỗi. - Nên dùng
NULLđể biểu thị "chưa set" thay vì zero timestamp. - Định nghĩa cột:
DueDate TIMESTAMP NULL DEFAULT NULL. - Khi SELECT:
WHERE DueDate IS NOT NULL.
Lưu ý
DueDate > 0là idiom MySQL-specific, tận dụng so sánh số nội bộ.- Không portable sang DB khác (PostgreSQL, SQL Server...).
- Index trên
DueDatevẫn hoạt động vớiDueDate > 0.