Sử dụng CURDATE() lấy ngày hiện tại (không có giờ), kết hợp DATE() để so sánh chỉ phần ngày của cột DATETIME.
Cú pháp
SELECT column1, column2, DATE_FORMAT(date_column, '%Y-%m-%d') AS date_only FROM table_name WHERE DATE(date_column) = CURDATE();
Ví dụ minh họa
mysql> CREATE TABLE GmailSignIn ( UserId INT, UserName VARCHAR(200), DateOfSignIn DATETIME ); Query OK, 0 rows affected (1.56 sec) -- Giả sử hôm nay là 2018-12-06 mysql> INSERT INTO GmailSignIn VALUES (222111, 'John', NOW()), (333222, 'Johnson', CURDATE()), (444333, 'Carol', DATE_ADD(CURDATE(), INTERVAL 1 DAY)), (555444, 'David', DATE_ADD(CURDATE(), INTERVAL -1 DAY)); Query OK, 4 rows affected
Truy vấn bản ghi hôm nay:
mysql> SELECT UserId, UserName, DateOfSignIn,
DATE_FORMAT(DateOfSignIn, '%Y-%m-%d') AS SignInDate
FROM GmailSignIn
WHERE DATE(DateOfSignIn) = CURDATE();
Kết quả:
+--------+----------+---------------------+-------------+ | UserId | UserName | DateOfSignIn | SignInDate | +--------+----------+---------------------+-------------+ | 222111 | John | 2018-12-06 19:13:30 | 2018-12-06 | | 333222 | Johnson | 2018-12-06 00:00:00 | 2018-12-06 | +--------+----------+---------------------+-------------+
Lưu ý hiệu năng
DATE(date_column) = CURDATE() không dùng được index trên cột date_column.
Cách tối ưu (SARGable):
WHERE date_column >= CURDATE() AND date_column < DATE_ADD(CURDATE(), INTERVAL 1 DAY)
Cách này tận dụng index và tránh hàm trên cột.