تاريخ الفرق في MySQL لحساب العمر
سؤال
لدي مشكلة بخصوص datediff
وظيفة MySQL ، يمكنني استخدامها وهي بسيطة. لكنني لا أفهم كيفية استخدامه لجمع الاختلافات داخل حقل الجدول. على سبيل المثال
لدي عمود dob
وأريد أن أكتب استعلامًا سيفعل شيئًا مثل
select dateDiff(current_timeStamp,dob)
from sometable 'here dob is the table column
أعني أنني أريد الفرق من وقت التاريخ الحالي إلى حقل الجدول dob
, ، كل نتيجة استعلام هي الفرق ، عصر المستخدم.
المحلول
تقصد مثل هذا؟
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable
(مصدر)
نصائح أخرى
يمكنك القيام بذلك
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS
سنFROM your_table
يعمل في كل مرة.
إذا كنت تريد ، لكل مستخدم ، عرض العمر منذ سنوات ، افعل
select name,extract(year from (from_days(dateDiff(current_timestamp,dob))))
from sometable;
إذا فهمت تعليقاتك على الإجابات السابقة ، فإن عمود تاريخ الولادة ليس في الواقع أ DATE
قيمة ولكن سلسلة في التنسيق m/d/y. أنا بقوة أوصيك بتغيير هذا ؛ إنه يبطئ أي حسابات تاريخ تريد القيام به وتخاطر بقيم التاريخ غير الصالحة في الدخول في العمود.
أعتقد أن هذا ما تحتاجه. يستخدم STR_TO_DATE()
وظيفة وخوارزمية لحساب العمر من وثائق MySQL:
SELECT YEAR(CURDATE()) - YEAR(STR_TO_DATE(dob, '%m/%d/%Y'))
- (RIGHT(CURDATE(), 5) < RIGHT(STR_TO_DATE(dob, '%m/%d/%Y'), 5)) AS age
FROM sometable;
أعتقد أن هذا يجب أن يساعد
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;
ملاحظة: أعط DOB بالتنسيق الصحيح ، على سبيل المثال YYYY-MM-DD'=> '1991-11-11
جرب هذا
SELECT DATEDIFF(CURDATE(), '2014-02-14');
select truncate(datediff(curdate(),dob)/365.25,0) from table;