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

Lọc học sinh có kết quả công bố 12 ngày trước ngày hiện tại trong MySQL

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)