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

Chọn dữ liệu từ bảng MySQL dựa trên tháng cụ thể

Sử dụng hàm MONTH() trong MySQL để chọn dữ liệu dựa trên tháng.

Tạo bảng demo

mysql> create table DemoTable (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName varchar(10),
    -> UserPostMessageDate datetime,
    -> UserLikes int
    -> );
Query OK, 0 rows affected (0.77 sec)

Chèn dữ liệu

mysql> insert into DemoTable(UserName, UserPostMessageDate, UserLikes) values('John', '2019-01-31', 4560);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(UserName, UserPostMessageDate, UserLikes) values('Sam', '2019-06-28', 790);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable(UserName, UserPostMessageDate, UserLikes) values('Carol', '2019-05-01', 230);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(UserName, UserPostMessageDate, UserLikes) values('David', '2019-03-05', 10000000);
Query OK, 1 row affected (0.33 sec)

Hiển thị tất cả

mysql> select * from DemoTable;

Kết quả

+----+----------+---------------------+-----------+
| Id | UserName | UserPostMessageDate | UserLikes |
+----+----------+---------------------+-----------+
| 1  | John     | 2019-01-31 00:00:00 | 4560      |
| 2  | Sam      | 2019-06-28 00:00:00 | 790       |
| 3  | Carol    | 2019-05-01 00:00:00 | 230       |
| 4  | David    | 2019-03-05 00:00:00 | 10000000  |
+----+----------+---------------------+-----------+
4 rows in set (0.00 sec)

Truy vấn lọc tháng 6 (tháng 6 = 6)

mysql> select Id, UserName, UserLikes from DemoTable where MONTH(UserPostMessageDate) = 6;

Kết quả - Chỉ bản ghi của Sam (tháng 6)

+----+----------+-----------+
| Id | UserName | UserLikes |
+----+----------+-----------+
| 2  | Sam      | 790       |
+----+----------+-----------+
1 row in set (0.00 sec)

Các hàm ngày/tháng liên quan:

  • YEAR(date): Năm (4 chữ số).
  • MONTH(date): Tháng (1-12).
  • DAY(date) / DAYOFMONTH(date): Ngày trong tháng (1-31).
  • QUARTER(date): Quý (1-4).
  • WEEK(date): Tuần trong năm.

Lưu ý hiệu năng: MONTH(cot) = 6 không dùng được index trên cột date. Cách tối ưu:

WHERE UserPostMessageDate >= '2019-06-01' AND UserPostMessageDate < '2019-07-01'