Oracle BUILT-IN Function EXTRACT
Eine sehr häufig gestellt Frage ist, wie alt ist eine Person und an welchem Tag hat die Person Geburtstag.
Diese Fragestellungen können ohne viel Zauberei von der ORACLE BUILT-IN Function EXTRACT beantwortet werden.
Hier ein paar Beispiele aus der Praxis. Als Ausgangsbasis wird natürlich das Geburtsdatum benötigt.
Extrahiert von einem Geburtsdatum den Tag, den Monat und das Jahr
1 2 3 4 5 6 7 8 9 10 11 |
SELECT EXTRACT (DAY FROM TO_DATE('18.05.1965','dd.mm.yyyy') -- Das Gebutsdatum ) AS "GEBURTSTAG", EXTRACT (MONTH FROM TO_DATE('18.05.1965','dd.mm.yyyy') -- Das Gebutsdatum ) AS "GEBURTSMONAT", EXTRACT (YEAR FROM TO_DATE('18.05.1965','dd.mm.yyyy') -- Das Gebutsdatum ) AS "GEBURTSJAHR" FROM DUAL; |
Ermittelt das Alter in Jahren
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
WITH date1 AS (SELECT extract( YEAR FROM to_date('2005-01-03','yyyy-mm-dd') ) JAHR ,extract( MONTH FROM to_date('2005-01-03','yyyy-mm-dd') ) MONAT ,extract( DAY FROM to_date('2005-01-03','yyyy-mm-dd') ) TAG FROM DUAL ), date2 AS (SELECT extract( YEAR FROM to_date('1989-01-08','yyyy-mm-dd') ) JAHR ,extract( MONTH FROM to_date('1989-01-08','yyyy-mm-dd') ) MONAT ,extract( DAY FROM to_date('1989-01-08','yyyy-mm-dd') ) TAG FROM DUAL ) SELECT CASE WHEN (d1.monat = d2.monat AND d1.tag >= d2.tag) OR (d1.monat > d2.monat) THEN d1.jahr - d2.jahr ELSE d1.jahr - d2.jahr -1 END "ALTER IN JAHRE" FROM date1 d1 , date2 d2 / |
Wenn ihr eine bessere Lösung habt – nur her damit :-)
2 KOMMENTARE

30
.
06
.
2015
Mir scheint das hier ein Fehler bei der Berechnung in Jahren vorliegt:
Bsp: geburtstag:1989-01-08 Zieldatum: 2005-01-03 Ergebnis : 16 tatsächlich : 15

13
.
07
.
2015
Hallo Chris,
du hattest natürlich Recht. Danke für den Hinweis. Den Post habe ich auch gleich angepasst.
Viele Grüße
Karsten