MySQL-Schnipsel

Auf dieser Seite habe ich ein paar Schnipsel aufgelistet, die ich irgendwann mal selbst geschrieben habe oder in verschiedenen Foren gefunden habe. Die Liste ist zwar momentan noch recht kurz, soll aber im Laufe der Zeit noch wachsen.

Alter eines Users berechnen (genaues Alter)
((YEAR(NOW())-YEAR(geburtsdatum)) - (MONTH(NOW())<MONTH(geburtsdatum)) - (DAYOFMONTH(NOW())<DAYOFMONTH(geburtsdatum) AND MONTH(NOW())=MONTH(geburtsdatum)))
Informationen zu den verwendeten Funktionen finden sich im MySQL-Handbuch im Kapitel Date and Time Functions
etwas kürzer lässt sich das ganze auch über den Query YEAR(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(geburtsdatum)+1)) lösen, allerdings liefert der in seltenen Fällen ein falsches Ergebnis.
Alter eines Users berechnen (Alter zum Jahresende)
YEAR(NOW())-YEAR(geburtsdatum)
Informationen zu den verwendeten Funktionen finden sich im MySQL-Handbuch im Kapitel Date and Time Functions
Alter eines Users berechnen (genaue Anzahl Jahre, Monate und Tage)
IF(DAYOFYEAR(NOW()) >= DAYOFYEAR(geburtsdatum), (YEAR(NOW()) - YEAR(geburtsdatum)), (YEAR(NOW()) - YEAR(geburtsdatum) - 1)) AS jahre, IF (DAYOFYEAR(NOW()) >= DAYOFYEAR(geburtsdatum), IF (DAY(geburtsdatum) > DAY(NOW()), MONTH(NOW()) - MONTH(geburtsdatum) - 1, MONTH(NOW()) - MONTH(geburtsdatum)), IF (DAY(geburtsdatum) > DAY(NOW()), 12 - (MONTH(geburtsdatum) - MONTH(NOW())) - 1, 12 - (MONTH(geburtsdatum) - MONTH(NOW())))) AS monate, IF (DAY(NOW()) >= DAY(geburtsdatum), (DAY(NOW()) - DAY(geburtsdatum)), (DAY(LAST_DAY(geburtsdatum)) - DAY(geburtsdatum)) + DAY(NOW())) AS tage
Hinweis: der Query funktioniert erst ab MySQL 4.1.1 (Die Funktionen DAY() und LAST_DAY() existieren erst seit dieser Version).
Informationen zu den verwendeten Funktionen finden sich im MySQL-Handbuch im Kapitel Date and Time Functions.
mehrere Spalten zu einer zusammenfassen
CONCAT(nachname, ', ', vorname) as name
Damit kann man im Abfrageergebnis mit der "Spalte" name direkt auf einen String, der Nach- und Vorname enthält, zugreifen; Die Funktion CONCAT() ist im MySQL-Handbuch im Kapitel String Functions beschrieben.
erste Zeile eines Texte ausgeben
SUBSTRING(beschreibung, 1, LOCATE('\n',beschreibung)-2) as titel
Diesen Schnippsel verwende ich z.B. in tkswim um in der Verzeichnisansicht die erste Zeile der Beschreibung der Dateien als Kurzzusammenfassung auszulesen. Die Beschreibung der Funktionen SUBSTRING() und LOCATE() finden sich im MySQL-Handbuch im Kapitel String Functions .