Seite 1 von 1

GELÖST Alter auf Grund von Geburtsdatum berechnen GELÖST

Verfasst: Do, 06.09.2007 20:09
von judisi
Dachte das sei ganz simple. Gib das Geburtsdatum ein und eine Abfrage rechnet mir dann das Alter aus. Die Formel DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) sollte das Ergebnis bringen.
Doch: das stimmt nicht. Das berechnet nur, wie alt derjenige noch dieses Jahr wird.

Wie komme ich zum tatsächlichen Alter?

PS: Ich verstehe nichts von sql und Co., sondern kann nur klicken ...

Re: Alter auf Grund von Geburtsdatum berechnen

Verfasst: Do, 06.09.2007 21:49
von SüdSauerland
Das Problem habe ich auch !

Wo hast du die Formel eingegeben ?
In einer Abfrage oder geht das direkt in einer Tabelle ?

Kennst du diesen Beitrag ?
viewtopic.php?f=8&t=11547&p=45589&hilit ... tag#p45589

Re: Alter auf Grund von Geburtsdatum berechnen

Verfasst: Do, 06.09.2007 22:14
von judisi
1. Formel habe ich in der Abfrage eingegeben
2. Die Beschreibung im Link führt bei mir zu exakt dem gleichen Ergebnis - Error

Re: Alter auf Grund von Geburtsdatum berechnen

Verfasst: Do, 06.09.2007 22:36
von judisi
Also wenn ich in der Abfrage:

( DATEDIFF( 'dd', "Geburtstag", CURDATE( ) ) ) / 365,25

eingebe, kommt das schon ganz gut hin. Nur: Der Computer rechnet, und rechnet ....

Ich kann mir nur nicht vorstellen, dass ich der einzige bin, der auf Grundlage eines Geburtsdatums das Alter berechnen möchte ... hat niemand ein (besseres) Rezept?

Re: Alter auf Grund von Geburtsdatum berechnen

Verfasst: Fr, 07.09.2007 16:21
von Toxitom
Hey judisi,

Die Formel
( DATEDIFF( 'dd', "Geburtstag", CURDATE( ) ) )
ist schon gut - wenn du es aber "Taggenau" willst, so fügst du den folgenden Teil hinzu:

( DATEDIFF( 'dd', "Geburtstag", CURDATE( ) ) ) - CASEWHEN( DAYOFYEAR("Geburtstag") > DAYOFYEAR(CURDATE()), -1, 0)

das heisst, das Alter wird um 1 reduziert, wenn der Geburtstag noch folgt, sonst stimmte ja die Formel :-)

Gruss
Thomas

Re: Alter auf Grund von Geburtsdatum berechnen

Verfasst: Fr, 07.09.2007 18:55
von judisi
Danke. Habe es gerade so gelöst und wollte es ins Forum schreiben:

CASEWHEN( DAYOFYEAR( "Geburtstag" ) > DAYOFYEAR( CURDATE( ) ), DATEDIFF( 'year', "Geburtstag", CURDATE( ) ) - 1, DATEDIFF( 'year', "Geburtstag", CURDATE( ) ) )

Re: GELÖST Alter auf Grund von Geburtsdatum berechnen GELÖST

Verfasst: Fr, 07.09.2007 20:40
von SüdSauerland
In meiner DB habe ich eine Tabelle in der ich das Feld „Geb“ vom Typ Datum [Date] habe.

Wenn ich nun in einer Abfrage im Bereich Kriterium
CASEWHEN( DAYOFYEAR( "Geb" ) > DAYOFYEAR( CURDATE( ) ), DATEDIFF( 'year', "Geb", CURDATE( ) ) - 1, DATEDIFF( 'year', "Geb", CURDATE( ) ) )
eingebe, erhalte ich die Meldung:

Warnung!

Der eingegebene Wert ist kein gültiges Datum. Bitte geben Sie ein Datum in einem gültigen Format ein, z.B. TT.MM.JJ.

Warum ?

Re: GELÖST Alter auf Grund von Geburtsdatum berechnen GELÖST

Verfasst: Sa, 08.09.2007 10:19
von Toxitom
Hey SuedSauerland,

Was soll das 'year' sein? Schätze, der Fehler liegt dort???

Gruss
Thomas

Re: Alter auf Grund von Geburtsdatum berechnen

Verfasst: Sa, 08.09.2007 11:22
von SüdSauerland
Das habe ich so übernommen und nur den Feldnamen Geburtstag durch Geb ersetzt.
judisi hat geschrieben:Danke. Habe es gerade so gelöst und wollte es ins Forum schreiben:

CASEWHEN( DAYOFYEAR( "Geburtstag" ) > DAYOFYEAR( CURDATE( ) ), DATEDIFF( 'year', "Geburtstag", CURDATE( ) ) - 1, DATEDIFF( 'year', "Geburtstag", CURDATE( ) ) )

Re: GELÖST Alter auf Grund von Geburtsdatum berechnen GELÖST

Verfasst: Sa, 22.12.2007 16:35
von stw
Guten Tag zusammen,

bin seit gerade eben neu dabei! Grund für meine Anmeldung war, daß ich hier sofort eine Lösung für mein Problem gefunden habe, es ging um die "Alters"-Frage in Abhängigkeit vom Geburtstag. Und da wollte ich auch meinen Teil dazu beitragen.

Die vorgeschlagene Lösung habe ich ausprobiert, aber sie lieferte bei mir ein falsches Ergebnis, weil ich das Alter auf einen Stichtag "17.12.2007" bezogen wissen wollte. Als Geburtsdatum hatte ich die drei Daten 16.12.1980, 17.12.1980 und 18.12.1980 angegeben. Um es kurz zu machen: 1980 war zufälligerweise ein Schaltjahr, und da war der 17.12. ein anderer "DayOfYear" als in 2007.

Die Umgebung: In einer Tabelle "tbAuswZeitraum" gibt es genau einen Satz, und der hat im Feld "AuswStichtag" den Wert "17.12.2007" stehen. In der Tabelle "tbMitglieder" gibt es das Feld "Geburtsdatum".

Meine Lösung: Ich vergleiche die Monat-/Tag-Kombination der beiden Datumsangaben. Der Abfragen-Text:

Code: Alles auswählen

SELECT 
"tbMitglieder"."Geburtsdatum" 
, "tbAuswZeitraum"."AuswStichtag"
, month("tbMitglieder"."Geburtsdatum") * 100 + dayofmonth("tbMitglieder"."Geburtsdatum" ) as monat_gebdat
, month("tbAuswZeitraum"."AuswStichtag") * 100 + dayofmonth("tbAuswZeitraum"."AuswStichtag" ) as monat_stichtag
, CASEWHEN( month("tbMitglieder"."Geburtsdatum") * 100 + dayofmonth("tbMitglieder"."Geburtsdatum" ) >
                         month("tbAuswZeitraum"."AuswStichtag") * 100 + dayofmonth("tbAuswZeitraum"."AuswStichtag" ),
                               DATEDIFF( 'year', "tbMitglieder"."Geburtsdatum", "tbAuswZeitraum"."AuswStichtag") - 1, 
                               DATEDIFF( 'year', "tbMitglieder"."Geburtsdatum", "tbAuswZeitraum"."AuswStichtag") ) as alter_stichtag
 FROM "tbAuswZeitraum", "tbMitglieder" 
WHERE "tbMitglieder"."Nachname" like 'T%'
order by "Geburtsdatum"
Das Geburtsdatum 17. und 18. (!) ergeben das Alter 27, der 19. ergibt 26 Jahre alt.

Also keine Probleme mehr mit dem Schaltjahr!

Re: GELÖST Alter auf Grund von Geburtsdatum berechnen GELÖST

Verfasst: Mi, 24.11.2010 22:39
von SüdSauerland
Hallo zusammen,

funktioniert diese Abfrage noch bei euch ?
In der eigentlichen Abfrage habe ich keine Probleme mit

Code: Alles auswählen

CASEWHEN( MONTH( "Tab-Stammdaten"."Geb" ) * 100 + DAYOFMONTH( "Tab-Stammdaten"."Geb" ) > MONTH( CURDATE( ) ) * 100 + DAYOFMONTH( CURDATE( ) ), DATEDIFF( 'year', "Tab-Stammdaten"."Geb", CURDATE( ) ) - 1, DATEDIFF( 'year', "Tab-Stammdaten"."Geb", CURDATE( ) ) )
nur wenn ich mit einem Bericht auf diese Felder zurückgreifen möchte bekomme ich immer einen Fehler.

Siehe hier:
viewtopic.php?f=8&t=36707

Gruß SüdSauerland