Ich habe MySQL vorher nicht oft verwendet und war mit den MySQL-Funktionen nicht sehr vertraut. Als ich auf dieses Problem stieß, habe ich sofort nach Baidu gesucht und diese beiden Methoden in Baidus Blogs an erster Stelle gefunden.
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age
Methode 1, der Autor wies auch auf den Fehler hin, das heißt, wenn das Datum ein zukünftiges Datum ist, ist das Ergebnis 0 und keine negative Zahl 5; Hier werden Funktionen und zwei Operatoren verwendet.
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age
Methode 2 löst das Problem der negativen Zahlen in Methode 1, sieht jedoch komplizierter aus; hier werden 6 Funktionen und 3 Operatoren verwendet.
Nachdem ich diesen Beitrag gelesen hatte, war ich fassungslos. Wie konnte es vorher so kompliziert sein? Ich bin fest davon überzeugt, dass es einen einfachen und effizienten Weg geben muss. Es wurde schnell eine verbesserte Methode basierend auf der oben genannten Methode gefunden.
SELECT year( from_days( datediff( now( ), birthdate))); SELECT YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5));
Verbesserte Methode eins, eine Funktion weniger und ein Operator fehlt. Wenn das Datum ein zukünftiges Datum ist, ist das Berechnungsergebnis immer noch 0;
Die verbesserte Methode 2 hat immer noch 6 Funktionen und 3 Operatoren, was einfacher aussieht, wenn das Datumsformat „2013-01-01“ ist, ist das Ergebnis „01-01“; , gibt es kein Problem; wenn das Datumsformat das abgekürzte Format „2013-1-1“ ist, werden die fünf Ziffern auf der rechten Seite als „3-1-1“ herausgenommen, was zu einem Fehler führt.
Dann fiel mir die dritte Methode ein, die auf der Datumsfunktion im MYSQL-Hilfedokument basiert:
SELECT FLOOR(DATEDIFF(CURDATE(), @birthday)/365.2422)
Dividieren Sie den Geburtstag und die Anzahl der Tage davor das aktuelle Datum Nehmen Sie die tatsächliche Anzahl der Tage in einem Jahr (365 Tage, 5 Stunden, 48 Minuten und 46 Sekunden) und runden Sie dann auf die nächste ganze Zahl. Dabei werden nur drei Funktionen und ein Operator verwendet.
Dann habe ich auf ausländischen Websites schnell die vierte Methode gefunden:
SELECT TIMESTAMPDIFF(YEAR, @birthday, CURDATE())
Diese Methode nutzt nur zwei Funktionen. Wahrscheinlich die beste.
Ich habe die oben genannten vier Methoden getestet. Wenn das aktuelle Datum „2017-1-13“ und der Geburtstag „2013-1-14“ ist, liegt der Geburtstag einen Tag entfernt, also 4 Jahre alt. Es ist nur noch ein Tag entfernt und das Ergebnis ist immer noch drei Jahre alt, was sich nicht sehr vernünftig anfühlt. Ändern Sie Methode drei und runden Sie ab, um Methode fünf zu erhalten:
SELECT ROUND(DATEDIFF(CURDATE(), @birthday)/365.2422)
Das auf diese Weise berechnete Alter ist dem tatsächlichen Alter bei weitem am nächsten, aber Methode 4 stimmt möglicherweise am besten mit der Definition des Alters überein.
[Verwandte Empfehlungen]
1. Kostenloses MySQL-Online-Video-Tutorial
2. Neuestes MySQL-Handbuch-Tutorial
3. Boolean Education Yan Shiba MySQL-Einführungsvideo-Tutorial
Das obige ist der detaillierte Inhalt vonFassen Sie die fünf Methoden zur Altersberechnung in MySQL und ihre jeweiligen Vor- und Nachteile zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!