Giới thiệu
Sử dụng DATEDIFF() kết hợp CURDATE() để tìm các bản ghi có ngày công bố kết quả cách ngày hiện tại ít nhất 12 ngày, kèm điều kiện điểm > 50.
1. Tạo bảng và dữ liệu
mysql> create table DemoTable1547 (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> StudentMarks int,
-> StudentResultDeclareDate datetime
-> );
Query OK, 0 rows affected (0.55 sec)
mysql> insert into DemoTable1547(StudentName,StudentMarks,StudentResultDeclareDate) values('Chris',56,'2019-10-13 13:00:00');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1547(StudentName,StudentMarks,StudentResultDeclareDate) values('Bob',60,'2019-10-13 12:00:00');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1547(StudentName,StudentMarks,StudentResultDeclareDate) values('Mike',45,'2019-10-13 14:00:00');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1547(StudentName,StudentMarks,StudentResultDeclareDate) values('Carol',78,'2019-10-01 14:00:00');
Query OK, 1 row affected (0.11 sec)
2. Ngày hiện tại (giả lập)
mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-10-13 | +------------+ 1 row in set (0.00 sec)
3. Truy vấn lọc
mysql> select * from DemoTable1547
-> where datediff(curdate(), StudentResultDeclareDate) >= 12
-> and StudentMarks > 50;
Giải thích:
DATEDIFF(date1, date2): Trả về date1 - date2 (số ngày, có thể âm)curdate(): Ngày hiện tại (không giờ)StudentResultDeclareDate: datetime, MySQL tự so sánh phần ngày- Carol: 2019-10-01 → 12 ngày trước 2019-10-13, điểm 78 > 50 → khớp
- Chris, Bob: cùng ngày 13/10 → DATEDIFF = 0 → không khớp
- Mike: điểm 45 ≤ 50 → không khớp
4. Kết quả
+-----------+-------------+--------------+--------------------------+ | StudentId | StudentName | StudentMarks | StudentResultDeclareDate | +-----------+-------------+--------------+--------------------------+ | 4 | Carol | 78 | 2019-10-01 14:00:00 | +-----------+-------------+--------------+--------------------------+ 1 row in set (0.00 sec)
Mẹo: Dùng DATE_SUB(CURDATE(), INTERVAL 12 DAY) cho dễ đọc hơn: WHERE StudentResultDeclareDate <= DATE_SUB(CURDATE(), INTERVAL 12 DAY)