วิธีคำนวณอายุจากวันเกิด (Date of Birth) ใน MySQL
ใช้ฟังก์ชัน TIMESTAMPDIFF() ซึ่งคำนวณความต่างระหว่างสองวันที่ในหน่วยที่กำหนด (YEAR, MONTH, DAY, ฯลฯ)
SELECT TIMESTAMPDIFF(YEAR, yourColumnName, NOW()) AS age FROM yourTableName;
ตัวอย่างการใช้งาน
สร้างตารางนักเรียนและวันเกิด:
mysql> create table DemoTable (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentDOB datetime
);
mysql> insert into DemoTable(StudentDOB) values('1996-01-12');
mysql> insert into DemoTable(StudentDOB) values('1990-12-31');
mysql> insert into DemoTable(StudentDOB) values('1989-04-01');
mysql> insert into DemoTable(StudentDOB) values('2000-06-17');
ข้อมูลวันเกิด:
+-----------+---------------------+ | StudentId | StudentDOB | +-----------+---------------------+ | 1 | 1996-01-12 00:00:00 | | 2 | 1990-12-31 00:00:00 | | 3 | 1989-04-01 00:00:00 | | 4 | 2000-06-17 00:00:00 | +-----------+---------------------+
คำนวณอายุ (สมมติวันนี้คือ 2019-04-16):
mysql> select timestampdiff(YEAR, StudentDOB, now()) AS AGE from DemoTable;
+------+ | AGE | +------+ | 23 | | 28 | | 30 | | 18 | +------+
ข้อดีของ TIMESTAMPDIFF:
- คำนวณอายุถูกต้องตามวันเกิดจริง (ไม่ใช่แค่ลบปี)
- รองรับหน่วยอื่นๆ:
MONTH,DAY,HOUR,MINUTE,SECOND,MICROSECOND - ทำงานได้กับ
DATE,DATETIME,TIMESTAMP
วิธีเก่า (ไม่แนะนำ): FLOOR(DATEDIFF(NOW(), dob)/365.25) - ไม่แม่นยำในปีอธิกสุรทิน