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

Truy vấn MySQL lấy bản ghi ngày hiện tại từ cột datetime

Sử dụng DATE(NOW()) hoặc CURDATE() để so sánh chỉ phần ngày.

Cú pháp

SELECT * FROM tenBang WHERE DATE(tenCot) = DATE(NOW());

Tạo bảng demo

mysql> create table DemoTable706 (
    UserId varchar(100),
    UserName varchar(100),
    UserSignupDate datetime
);
Query OK, 0 rows affected (0.57 sec)

Chèn dữ liệu (2 bản ghi ngày hôm nay 2019-07-22)

mysql> insert into DemoTable706 values('John1@gmail.com', 'John', '2019-01-31 12:45:22');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable706 values('Chris123@gmail.com', 'Chris', '2019-07-22 10:05:02');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable706 values('12Robert@gmail.com', 'Robert', '2019-06-22 11:25:22');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable706 values('DavidM@gmail.com', 'David', '2019-07-22 00:00:02');
Query OK, 1 row affected (0.12 sec)

Hiển thị tất cả

mysql> select * from DemoTable706;

Kết quả

+--------------------+----------+---------------------+
| UserId             | UserName | UserSignupDate      |
+--------------------+----------+---------------------+
| John1@gmail.com    | John     | 2019-01-31 12:45:22 |
| Chris123@gmail.com | Chris    | 2019-07-22 10:05:02 |
| 12Robert@gmail.com | Robert   | 2019-06-22 11:25:22 |
| DavidM@gmail.com   | David    | 2019-07-22 00:00:02 |
+--------------------+----------+---------------------+
4 rows in set (0.00 sec)

Truy vấn lọc bản ghi ngày hôm nay

mysql> select * from DemoTable706 where DATE(UserSignupDate) = DATE(NOW());

Kết quả - 2 bản ghi ngày 2019-07-22

+--------------------+----------+---------------------+
| UserId             | UserName | UserSignupDate      |
+--------------------+----------+---------------------+
| Chris123@gmail.com | Chris    | 2019-07-22 10:05:02 |
| DavidM@gmail.com   | David    | 2019-07-22 00:00:02 |
+--------------------+----------+---------------------+
2 rows in set (0.00 sec)

Giải thích:

  • DATE(UserSignupDate): Lấy phần ngày từ datetime.
  • DATE(NOW()) hoặc CURDATE(): Ngày hiện tại của server.
  • So sánh bằng → lọc chính xác ngày (bỏ qua giờ).

Tối ưu cho bảng lớn (dùng index):

WHERE UserSignupDate >= CURDATE() 
  AND UserSignupDate < CURDATE() + INTERVAL 1 DAY

Cách này cho phép dùng index trên cột UserSignupDate (range scan).