Iceboone 2 Geschrieben 19. Februar 2021 Melden Teilen Geschrieben 19. Februar 2021 Hallo, ich habe folgendes Problem. Ich habe eine SQL-Abfrage, die eigentlich die kommenden Geburtstage anzeigen soll. Tut sie auch. Das ganze Jahr. Nur im Februar fehlen immer die Geburtstagskinder des aktuellen Tages. Somit muss es wohl am Februar mit seinen 28/29 Tagen sein. Wo ist der Fehler in der Abfrage? SELECT KUNDE.VNAME, KUNDE.STATUS, KUNDE.VN_GEBURT, CASE WHEN ((EXTRACT(MONTH FROM VN_GEBURT) = 2) AND (EXTRACT(DAY FROM VN_GEBURT) = 29) AND ((59 = EXTRACT(YEARDAY FROM CAST((EXTRACT(YEAR FROM CURRENT_DATE) || '-3-1') AS TIMESTAMP))))) THEN CAST('01.03.' || EXTRACT(YEAR FROM CURRENT_DATE) AS DATE) WHEN ((EXTRACT(MONTH FROM VN_GEBURT) >= EXTRACT(MONTH FROM CURRENT_DATE))) THEN CAST(EXTRACT(DAY FROM VN_GEBURT) || '.' || EXTRACT(MONTH FROM VN_GEBURT) || '.' || EXTRACT(YEAR FROM CURRENT_DATE) AS DATE) ELSE CAST(EXTRACT(DAY FROM VN_GEBURT) || '.' || EXTRACT(MONTH FROM VN_GEBURT) || '.' || EXTRACT(YEAR FROM DATEADD(1 YEAR TO CURRENT_DATE)) AS DATE) END AS GEBURTSTAG, FLOOR(DATEDIFF(DAY FROM VN_GEBURT TO CURRENT_DATE + 30) / 365.25) AS KOMMENDES_ALTER, (FLOOR(DATEDIFF(DAY FROM VN_GEBURT TO CURRENT_DATE + 30) / 365.25)) - (FLOOR(DATEDIFF(DAY FROM VN_GEBURT TO CURRENT_DATE) / 365.25)), KUNDE.AMSIDNR FROM "KUNDE" WHERE ((1 = (FLOOR(DATEDIFF(DAY FROM VN_GEBURT TO CURRENT_DATE + 30) / 365.25)) - (FLOOR(DATEDIFF(DAY FROM VN_GEBURT TO CURRENT_DATE) / 365.25))) OR (((EXTRACT(MONTH FROM VN_GEBURT) = 2) AND (EXTRACT(DAY FROM VN_GEBURT) = 29) AND (CAST('01.03.' || EXTRACT(YEAR FROM CURRENT_DATE) AS DATE) = CURRENT_DATE) AND (59 = EXTRACT(YEARDAY FROM CAST((EXTRACT(YEAR FROM CURRENT_DATE) || '-3-1') AS TIMESTAMP)))) OR (((EXTRACT(MONTH FROM VN_GEBURT) <> 2) AND (EXTRACT(DAY FROM VN_GEBURT) <> 29)) AND (CAST(EXTRACT(DAY FROM VN_GEBURT) || '.' || EXTRACT(MONTH FROM VN_GEBURT) || '.' || EXTRACT(YEAR FROM CURRENT_DATE) AS DATE) = CURRENT_DATE)))) AND KUNDE.STATUS IN ('KUNDE', 'INTERESSENT') AND KUNDE.IS_HISTORIE = 0 AND KUNDE.ZUORDNUNG = 'PRIVAT' AND COALESCE(KUNDE.VN_GEBURT, '') <> '' AND KUNDE.VN_VERSTORBEN IS NULL ORDER BY GEBURTSTAG Wenn Ihr mir da helfen könntet wäre das echt super. Vielen Dank im Voraus. Gruß Volker Zitieren Link zu diesem Kommentar
NilsK 2.785 Geschrieben 19. Februar 2021 Melden Teilen Geschrieben 19. Februar 2021 Moin, damit man eine Idee hat, wonach man suchen soll - kannst du bitte kurz beschreiben, was die Abfrage genau zurückgeben soll und was genau nicht funktioniert? Gruß, Nils Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 19. Februar 2021 Autor Melden Teilen Geschrieben 19. Februar 2021 Also die Selektion soll alle kommenden Geburtstage inklusive heute anzeigen. Leider zeigt er die kommenden Geburtstage an, aber OHNE heute. Wenn ich das Datum aber manuell auf März ändere, dann funktioniert es wieder. Systemdatum 19.02.2021 Systemdatum 16.03.2021: Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 19. Februar 2021 Melden Teilen Geschrieben 19. Februar 2021 Okay ich bin ja keine Oracle/MySQL Spezialist aber das Ganze erscheint mir doch recht umständlich. Was ist mit den Befehlen EOMONTH (T-SQL) respektive Last_Day(). Damit solltest du das Schaltjahrproblem in den Griff kriegen. Und mit ohne es zu wissen vermute ich mal das es eine wesentlich übersichtlichere Art gibt das Datum zu formatieren statt es zusammenzusetzen. Mit der Rechnerei wirst du vermutlich Schwierigkeiten haben wenn du nicht mit Ganzzahlen rechnest (365.25) Zitieren Link zu diesem Kommentar
Iceboone 2 Geschrieben 19. Februar 2021 Autor Melden Teilen Geschrieben 19. Februar 2021 vor 4 Minuten schrieb MDD: Okay ich bin ja keine Oracle/MySQL Spezialist aber das Ganze erscheint mir doch recht umständlich. Was ist mit den Befehlen EOMONTH (T-SQL) respektive Last_Day(). Damit solltest du das Schaltjahrproblem in den Griff kriegen. Und mit ohne es zu wissen vermute ich mal das es eine wesentlich übersichtlichere Art gibt das Datum zu formatieren statt es zusammenzusetzen. Mit der Rechnerei wirst du vermutlich Schwierigkeiten haben wenn du nicht mit Ganzzahlen rechnest (365.25) Das Ding ist, ich habe da ehrlich gesagt keine Ahnung von. Zumindest nicht in der Tiefe. Diese Query hat mein Vorgänger damals geschrieben und jetzt fällt das Problem auf. In zehn Tagen hat es sich von selbst erledigt, aber ich hätte es halt gerne verstanden :) Zitieren Link zu diesem Kommentar
MDD 12 Geschrieben 19. Februar 2021 Melden Teilen Geschrieben 19. Februar 2021 habe weder Oracle noch MySQL hier um es auszutesten aber bei mir schaut es im T-SQL so aus. Datum ist noch nicht formatiert. Habe jetzt einfach vom zum heutigen Tag 31 dazugezählt. Womit unter Umständen mehr als 1 Monat angezeigt wird SELECT cast(gebdatum AS DATE) geborenAm ,Vorname ,Nachname ,year(getdate()) - year(gebdatum) as NeuAlter ,dateadd(year, year(getdate()) - year(gebdatum), gebdatum) NaechsterGeburtstag FROM T_Mitarbeiter WHERE dateadd(year, year(getdate()) - year(gebdatum), gebdatum) BETWEEN cast(getdate() AS DATE) AND cast(dateadd(DAY, 31, getdate()) AS DATE) ORDER BY 5 Heutiger Tag und 28. Februar wurden richtig berücksichtigt. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.