Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คำนวณอายุจากวันเกิดใน MySQL ใช้ YEAR และ RIGHT


สูตรคำนวณอายุ (ปีเต็ม)

ใช้ YEAR(CURRENT_TIMESTAMP) ลบ YEAR(dob) แล้วปรับตามว่าวันเกิดปีนี้ผ่านไปหรือยัง:

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

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มวันเกิดต่างๆ

CREATE TABLE AgeCalculatesDemo (YourDateOfBirth DATETIME);
INSERT INTO AgeCalculatesDemo VALUES
(DATE_ADD(NOW(), INTERVAL -22 YEAR)),  -- 22 ปีก่อน
(DATE_ADD(NOW(), INTERVAL -12 YEAR)),  -- 12 ปีก่อน
(DATE_ADD(NOW(), INTERVAL -19 YEAR)),  -- 19 ปีก่อน
('2010-04-05');                        -- วันที่คงที่

ข้อมูลวันเกิด (สมมติ 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 |
+---------------------+

คำสั่งคำนวณอายุ

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

ผลลัพธ์

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

คำอธิบายตรรกะ

  • YEAR(CURRENT_TIMESTAMP) - YEAR(dob) = ความต่างปีโดยประมาณ
  • RIGHT(date, 5) = ดึง "MM-DD" (เดือน-วัน)
  • RIGHT(NOW,5) < RIGHT(dob,5) = วันนี้ยังไม่ถึงวันเกิดปีนี้ = 1 (True) → ลบอีก 1
  • รวม = อายุปีเต็มที่ถูกต้อง

วิธีอื่นที่เข้าใจง่ายกว่า (MySQL 8.0+)

-- ใช้ TIMESTAMPDIFF
SELECT TIMESTAMPDIFF(YEAR, YourDateOfBirth, CURDATE()) AS Age
FROM AgeCalculatesDemo;

TIMESTAMPDIFF จัดการวันเกิด 29 กุมภาพันธ์ และ Edge Cases ได้ถูกต้องกว่า

คำนวณอายุละเอียด (ปี เดือน วัน)

SELECT 
    TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS years,
    TIMESTAMPDIFF(MONTH, dob, CURDATE()) % 12 AS months,
    FLOOR(DATEDIFF(CURDATE(), DATE_ADD(dob, INTERVAL TIMESTAMPDIFF(MONTH, dob, CURDATE()) MONTH))) AS days
FROM your_table;