Datumsdifferenz mit SQL
-
ich habe eine SQL Datenbank für Personendaten mit folgendem Aufbau (etwas vereinfacht)
Nr, ZuordnungNr, Text, Datum
(die Bezeichnungen sind wohl selbsterklärend)im Inhalt steht dann zb:
...
10 , 5 , Geburt, 2000-10-11
11 , 5 , Tod, 2004-11-05
12 , 6 , Geburt, 1980-01-20
13 , 7 , Tod, 1999-02-09
...Nun möchte ich das Alter der Person "5" berechnen.
Stünden in einem Datensatz die beiden Datumsangaben wär's einfach:
"select (geb-tod) as alter from daten where ZuordnungNr='5'"aber wie mache ich das hier?
-
Wieso soll das einfach sein wenn du beginn und enddatum hast.
Du kannst nur die Sekunden rausbekommen die zw. den beiden liegen.
Es gibt mit SQL keine Möglichkeit das alter rauszubekommen.Ich mache dies mit php z.B. so:
function getalter($date_of_birth) { list ($year, $month, $day) = explode('-', $date_of_birth); $age = date('Y') - $year; if (date('m') < $month) $age--; elseif (date('d') < $day) $age--; return $age; }
Kannst ja für deine zwecke umbauen und auch das enddatum übergeben.
-
select datum - (select datum from personendaten where id = 5 and text = 'Geburt') as alter
from personendaten where id = 5 and text = 'Tod'
-
Das datum - datum gehen soll würde mich wunder. ALTER ist ein Schlüsselwort und sowieso nicht erlaubt.
-
Hmm, ich weiss nicht welche DB er verwendet. Und wenn er sagt, das Minus bei ihm auf Datums-Spalten funktioniert sehe ich keinen Grund ihm das nicht zu gleuben.
Bei mir funktionierts ja auch Auch wenn ich dafür 'ne UDF schreiben musste um den Minus-Operator für DATE zu überladen...
Mit dem ALTER hast du natürlich recht, da habe ich gepennt.
-
Deshalb gibt es ja bei Access eine DateDiff-Funktion.
Bei MySQL geht das nicht.
Man kann nur die Diff in sekunden bekommen. Diese muss man aber wieder umrechnen.
es hat aber auch nicht jedes Jahr gleichviele Sekunden.
-
Ich habe gerade nochmal nachgesehen.
Ich habe Plus und Minus nur für (DATE, INT) überladen, um z.B. schreiben zu können
select eroeffnung + laufzeit as laufzeitende from tabelle
DATE - DATE funktioniert bei DB2 von Haus aus. Liefert die Differenz in Tagen.
-
Da hier keine DB genannt wurde (von keinem - MySQL ist ja auch keine :p) kann ich nur sagen, dass unter Oracle date-date sehrwohl funktioniert
MfG SideWinder
-
Sorry, dass meine Antwort solange dauert.
Also, ja, ich verwende MySQL, ABER die Spalte heist bei mir DatumBeginn (wollte es nur hier für's Forum etwas vereinfachen und bin wohl prompt in die Falle getappt)