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

Tính tuổi từ ngày sinh (Date of Birth) trong MySQL


Công thức chuẩn: Năm hiện tại - Năm sinh - (Ngày/tháng hiện tại < Ngày/tháng sinh ? 1 : 0).

Cú pháp

SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(dob_column)
       - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(dob_column, 5)) AS age
FROM table_name;

Giải thích:

  • YEAR(CURRENT_TIMESTAMP): năm hiện tại.
  • RIGHT(date, 5): lấy chuỗi 'MM-DD' (5 ký tự cuối của 'YYYY-MM-DD').
  • So sánh chuỗi 'MM-DD' hoạt động đúng vì định dạng cố định.
  • Nếu hôm nay chưa đến sinh nhật năm nay → trừ 1.

Ví dụ minh họa

mysql> CREATE TABLE AgeCalculatesDemo (YourDateOfBirth DATETIME);
Query OK, 0 rows affected (0.50 sec)

mysql> INSERT INTO AgeCalculatesDemo VALUES
(DATE_ADD(NOW(), INTERVAL -22 YEAR)),
(DATE_ADD(NOW(), INTERVAL -12 YEAR)),
(DATE_ADD(NOW(), INTERVAL -19 YEAR)),
('2010-04-05');
Query OK, 4 rows affected

Dữ liệu (giả sử NOW = 2018-12-06):

+---------------------+
| YourDateOfBirth     |
+---------------------+
| 1996-12-06 23:35:26 |
| 2006-12-06 23:35:32 |
| 1999-12-06 23:35:42 |
| 2010-04-05 00:00:00 |
+---------------------+

Tính tuổi:

mysql> SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(YourDateOfBirth)
       - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(YourDateOfBirth, 5)) AS YourAge
FROM AgeCalculatesDemo;

Kết quả:

+---------+
| YourAge |
+---------+
| 22      |
| 12      |
| 19      |
| 8       |
+---------+

Cách thay thế (MySQL 8.0+)

SELECT TIMESTAMPDIFF(YEAR, YourDateOfBirth, CURDATE()) AS Age
FROM AgeCalculatesDemo;

TIMESTAMPDIFF tự xử lý logic sinh nhật, chuẩn xác và dễ đọc hơn.

So sánh

Phương pháp Phiên bản Độ phức tạp Khuyến nghị
Công thức YEAR - YEAR - ... Tất cả Phức tạp MySQL cũ
TIMESTAMPDIFF(YEAR, dob, CURDATE()) MySQL 5.0+ Đơn giản Khuyến nghị
DATEDIFF(CURDATE(), dob)/365.25 Tất cả Sai số nhẹ Không khuyến nghị