[MySQL] หาอายุจากวันเกิด ที่เป็น พ.ศ. แบบง่ายๆ ใครๆ ก็เขียนได้


เคยใช้แต่ DATEDIFF อยู่รึป่าวครับ ถ้าใช่ได้เวลาลองอะไรแปลกๆ แล้วครับ :) วันนี้ขอเสนอ....ท่าด๊าาาาาม TIMESTAMPDIFF เพื่อไม่ให้ Blog เงียบเหงาจนเกินไป ... แป่ววววววว

สมมุตว่าผมมี ตาราง user และมี birth_date เอาไว้เก็บวันเกิด ในที่นี้เก็บเป็นแบบ พ.ศ. ถ้าไป Search ตาม Google ส่วนใหญ่จะใช้ Datediff เพื่อหาวัน แล้วเอาวันมาคำนวณอีกที

แต่เดี๋ยวก่อน ซาร่าห์ ... จอร์จมีวิธีที่ง่ายกว่านั้น แค่เขียน Statement ตามนี้

SELECT TIMESTAMPDIFF( YEAR, birth_date, '2558-08-06' ) AS age
FROM `user`

ตรง YEAR นี่ล่ะครับ จะเป็นการกำหนด ให้แสดงออกมาเป็นปี ถ้าอยากให้เป็นเดือน ก็ใช้ MONTH อะไรก็ว่าไป

Q: อ่าว.... แล้วไอ่ 2558-08-06 มันจะมาได้ยังไง?
A: เขียน PHP ยัดใส่เลยครับ ง่ายแสรด เช่น
$thai_date = '2558-08-06';
$sql = "SELECT TIMESTAMPDIFF( YEAR, birth_date, '$thai_date' ) AS age FROM `user`";

Q: โหยยยย ยุ่งยากอ่ะ ไม่ต้องมีตัวแปรได้ป่ะ
A: ได้สิครับ ... จัดปายยยยยยยยยยยย

SELECT TIMESTAMPDIFF( YEAR, dbirth, CONCAT( ( YEAR( NOW() ) + 543 ), DATE_FORMAT( NOW(), '-%m-%d %H:%i:%s' ) ) ) AS age
FROM `opcard`

โดยเลือกปี ค.ส. แล้วเอามาบวกกับ 543 อีกที จากนั้นก็เอามา CONCAT ให้มันเป็น String ซะ ... อาจจะทดสอบด้วยการ

SELECT CONCAT( ( YEAR( NOW( ) ) +543 ) , DATE_FORMAT( NOW( ) , '-%m-%d %H:%i:%s' )
ธรรมดานี่ล่ะครับ

อ้างอิง http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff

Comments