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

Truy vấn tuổi từ ngày sinh (DOB) trong MySQL

Yêu cầu

Lọc bản ghi có độ tuổi lớn hơn hoặc bằng một ngưỡng (ví dụ: ≥ 16 tuổi) từ cột DATE OF BIRTH.

Cách 1: Dùng INTERVAL (khuyên dùng)

Tạo bảng:

CREATE TABLE DemoTable611 (DOB DATE);
INSERT INTO DemoTable611 VALUES
('1996-04-21'), ('2001-01-31'), ('2004-12-21'), ('2000-02-03');

Truy vấn người ≥ 16 tuổi (tính đến ngày hiện tại):

SELECT * FROM DemoTable611
WHERE DOB >= (CURDATE() - INTERVAL 16 YEAR);

Giả sử CURDATE() = '2019-03-04', kết quả:

+------------+
| DOB        |
+------------+
| 2004-12-21 |
+------------+

Cách 2: Tính tuổi chính xác (năm tròn)

SELECT *,
       TIMESTAMPDIFF(YEAR, DOB, CURDATE()) AS age
FROM DemoTable611
WHERE TIMESTAMPDIFF(YEAR, DOB, CURDATE()) >= 16;

Cách 3: Tính tuổi chính xác (có tháng/ngày)

SELECT *,
       FLOOR(DATEDIFF(CURDATE(), DOB) / 365.25) AS approx_age
FROM DemoTable611;

So sánh các phương pháp

Phương phápĐộ chính xácHiệu năngDùng index
DOB >= CURDATE() - INTERVALTuổi "ít nhất" (chưa tính tháng/ngày)Cao (sargable)✓ Có
TIMESTAMPDIFF(YEAR, ...)Chính xác năm trònTrung bình✗ Không
DATEDIFF / 365.25Xấp xỉThấp✗ Không

Best Practice

  • Dùng DOB <= DATE_SUB(CURDATE(), INTERVAL 16 YEAR) cho filter (có index).
  • Dùng TIMESTAMPDIFF cho hiển thị tuổi chính xác.
  • Tránh function trên cột trong WHERE nếu muốn dùng index.