von stw » Sa, 22.12.2007 16:35
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!
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 [b]Schaltjahr[/b], 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]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"[/code]
Das Geburtsdatum 17. und 18. (!) ergeben das Alter 27, der 19. ergibt 26 Jahre alt.
Also keine Probleme mehr mit dem Schaltjahr!