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

Chọn ngày distinct từ cột DATETIME trong MySQL

Tóm tắt

Dùng DISTINCT kết hợp YEAR(), MONTH() (và DAY() nếu cần) để lấy các ngày duy nhất từ cột DATETIME.

Ví dụ

1. Tạo bảng tin nhắn

CREATE TABLE PostMesssageDemo (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserMessage VARCHAR(100),
    UserPost DATETIME
);

2. Dữ liệu (có trùng ngày 2019-02-15)

INSERT INTO PostMesssageDemo (UserMessage, UserPost) VALUES
('Software Developer', NOW()),
('Software Developer', DATE_ADD(NOW(), INTERVAL 3 MONTH)),
('Software Developer', NOW()),
('Software Developer', '2019-03-31 17:30:34');

3. Lấy năm, tháng distinct

SELECT DISTINCT YEAR(UserPost), MONTH(UserPost) FROM PostMesssageDemo;

4. Kết quả

+----------------+-----------------+
| year(UserPost) | month(UserPost) |
+----------------+-----------------+
| 2019           | 2               |
| 2019           | 5               |
| 2019           | 3               |
+----------------+-----------------+

Các biến thể

-- Chỉ ngày (YYYY-MM-DD)
SELECT DISTINCT DATE(UserPost) FROM PostMesssageDemo;

-- Năm, tháng, ngày
SELECT DISTINCT YEAR(UserPost), MONTH(UserPost), DAY(UserPost) FROM PostMesssageDemo;

-- Format tùy chỉnh
SELECT DISTINCT DATE_FORMAT(UserPost, '%Y-%m') FROM PostMesssageDemo;

Hiệu năng

  • DISTINCT cần sort/unique – chậm trên bảng lớn.
  • Tạo index trên cột DATETIME giúp tăng tốc.
  • Nếu chỉ cần năm/tháng, cân nhắc cột generated: post_year_month INT AS (YEAR(UserPost)*100 + MONTH(UserPost)) STORED + index.