سؤال

لدي مشكلة بخصوص 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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top