Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Kiểm tra TIMESTAMP đã được thiết lập (khác zero) trong MySQL

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_DATE SQL 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 > 0 là 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 DueDate vẫn hoạt động với DueDate > 0.