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

Truy vấn bản ghi timestamp trong giờ hiện tại với HOUR() và CURTIME() trong MySQL

Giới thiệu

Lọc các hàng có giá trị timestamp rơi trong giờ hiện tại (cùng giờ, bất kể ngày) bằng hàm HOUR() và CURTIME().

1. Tạo bảng và dữ liệu

mysql> create table DemoTable (
    -> ArrivalTime timestamp
    -> ); 
Query OK, 0 rows affected (0.65 sec)

mysql> insert into DemoTable values('2019-10-26 17:55:55'); 
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('2019-10-26 18:00:00'); 
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-10-26 18:55:00'); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2018-10-26 16:00:10'); 
Query OK, 1 row affected (0.20 sec)

2. Dữ liệu gốc

mysql> select *from DemoTable;
+---------------------+
| ArrivalTime         |
+---------------------+
| 2019-10-26 17:55:55 |
| 2019-10-26 18:00:00 |
| 2019-10-26 18:55:00 |
| 2018-10-26 16:00:10 |
+---------------------+
4 rows in set (0.00 sec)

3. Giờ hiện tại (giả lập)

mysql> select curtime(); 
+-----------+
| curtime() |
+-----------+
| 18:43:55  |
+-----------+
1 row in set (0.00 sec)

4. Truy vấn lọc giờ hiện tại (giờ 18)

mysql> select *from DemoTable where hour(ArrivalTime) = hour(curtime());

5. Kết quả

+---------------------+
| ArrivalTime         |
+---------------------+
| 2019-10-26 18:00:00 |
| 2019-10-26 18:55:00 |
+---------------------+
2 rows in set (0.00 sec)

Giải thích:

  • HOUR(ArrivalTime): Trích xuất giờ (0-23) từ timestamp
  • HOUR(CURTIME()): Giờ hiện tại (18)
  • So sánh số nguyên → khớp 2 hàng giờ 18 (bỏ qua ngày, phút, giây)

Mở rộng: Lọc khoảng giờ (ví dụ: 1 giờ trước đến giờ hiện tại)

WHERE ArrivalTime >= DATE_SUB(NOW(), INTERVAL 1 HOUR)
  AND ArrivalTime <= NOW()

Cách này tận dụng index trên cột ArrivalTime (nếu có), nhanh hơn dùng hàm HOUR().