2009-09-05 6 views
8

Ich habe ein Problem in Bezug auf die datediff MYSQL-Funktion, ich kann es verwenden, und es ist einfach. Aber ich verstehe nicht, wie man es benutzt, um Unterschiede innerhalb des Tabellenfeldes zu sammeln. Z.B.Datum Unterschied in MySQL, um Alter zu berechnen

Ich habe eine Spalte dob und ich möchte eine Abfrage schreiben, die so etwas wie

select dateDiff(current_timeStamp,dob) 
from sometable 'here dob is the table column 

tun werde ich meine ich die Differenz aus dem aktuellen Datum Zeit auf das Tabellenfeld dob, jedes Abfrageergebnis wollen, ist die Unterschied, das Alter des Benutzers.

+0

Wäre das nicht „um die Differenz aus der aktuellen Datumzeit und eine DOB“ immer diese Person Alter sein? –

Antwort

19

Sie meinen so?

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable 

(Source)

+0

Rückgabe Null mein gespeichertes Datum ist m/d/Jahr, für Datensatz, den ich arbeite, hat 1/1/1969 dob. aber es gibt Null :(die ganze Zeit – chsab420

+0

Mit TIMESTAMPDIFF ist eine viel bessere Option – Eric

1

Wenn Sie möchten, für jeden Benutzer, zeigen Sie das Alter in Jahren, tun

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
     from sometable; 
+0

Returns Null mein Datum gespeichert ist m/d/Jahr, für Datensatz, den ich arbeite hat 1/1/1969 dob. aber es gibt null zurück: (die ganze Zeit – chsab420

+0

Also, was ist der Datentyp auf Ihrem DOB-Feld? Sie sollten wirklich eine Datum/Uhrzeit-Typ, kein einfacher Text verwenden. –

1

Wenn ich Ihre Kommentare zu den vorherigen Antworten zu verstehen, das Datum-of -birth column ist kein DATE Wert, sondern eine Zeichenfolge im Format m/d/y. I stark empfehlen, dass Sie dies ändern; Es verlangsamt alle Datumsberechnungen, die Sie ausführen möchten, und Sie riskieren, dass ungültige Datumswerte in die Spalte eingegeben werden.

Ich denke, das ist, was Sie brauchen. Es nutzt die STR_TO_DATE() Funktion und einen Algorithmus zur Berechnung des Alters aus der MySQL-Dokumentation:

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; 
0

Ich denke, der

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

Hinweis helfen soll: Geben Sie den D.O.B im richtigen Format, zum Beispiel YYYY-MM-DD'=> '1991-11-11

8

könnten Sie tun dies

SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS Alter FROM your_table

jedes Mal Works.

0

dieses Versuchen

SELECT DATEDIFF(CURDATE(), '2014-02-14'); 
0
select truncate(datediff(curdate(),dob)/365.25,0) from table; 
Verwandte Themen