❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Wer hat diese Woche Geburtstag?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Freischreiber
* LO-Experte *
Beiträge: 837
Registriert: Fr 28. Mär 2014, 10:41

Wer hat diese Woche Geburtstag?

Beitrag von Freischreiber » Sa 18. Apr 2015, 10:42

Hallo,

beim Abfragen meiner Adressen mit

Code: Alles auswählen

SELECT "t-adressen"."Nachname", "t-adressen"."Vorname", "t-adressen"."Geburtsdatum", DAYOFWEEK( "Geburtsdatum" ) AS "Tagnummer Gebtag", DAYOFWEEK( CURDATE( ) ) AS "Tagnummer heute", WEEK( "Geburtsdatum" ) AS "Woche GebTag" , WEEK( CURDATE() ) AS "Woche heute"  FROM "t-adressen" WHERE WEEK( "Geburtsdatum" ) = WEEK( CURDATE( ) )
bekomme ich das seltsame Ergebnis, daß Geburtstage in der nächsten Woche (Tag 1 der Woche nach SQL) schon heute (Samstag, Tag 7 der Woche nach SQL) angezeigt werden, wenn man die Wochenzahlen vergleicht. Vermutlich fängt, wenn freitags Silvester ist, gleich am Samstag mit Neujahr die erste Woche an und am Sonntag drauf schon die zweite?

Wie macht man es richtig, wenn für heute (curdate) die Geburtstage
a) der aktuellen Kalenderwoche oder
b) der nächsten sieben Tage angezeigt werden sollen?

Gruß
Freischreiber
Dateianhänge
Geburtstage-Abfrage am 18.04.15.gif
Geburtstage-Abfrage am 18.04.15.gif (6.62 KiB) 3139 mal betrachtet
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

Freischreiber
* LO-Experte *
Beiträge: 837
Registriert: Fr 28. Mär 2014, 10:41

Re: Wer hat diese Woche Geburtstag?

Beitrag von Freischreiber » Sa 18. Apr 2015, 14:39

Danke fürs Daumendrücken, ich hab hier:
http://www.sqlservercentral.com/Forums/ ... 323-1.aspx

was nettes gefunden:

Code: Alles auswählen

SELECT "t-adressen"."Nachname", "t-adressen"."Vorname", "t-adressen"."Geburtsdatum" 
FROM "t-adressen" WHERE "t-adressen"."Geburtsdatum" IS NOT NULL AND 
DATEDIFF( 'dd', 
DATEADD('yy', -(YEAR(CURRENT_DATE)-1900), CURRENT_DATE), 
DATEADD('yy', -(YEAR("t-adressen"."Geburtsdatum")-1900), "t-adressen"."Geburtsdatum")
) BETWEEN -2 AND 7
Es macht aus den Datumsangaben aller Jahre solche im Jahr 1900 und berechnet dann die Tagdifferenz.
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Wer hat diese Woche Geburtstag?

Beitrag von F3K Total » Sa 18. Apr 2015, 16:56

Hi,
ist es nicht einfacher, den Geburtstag im aktuellen Jahr zu berechnen ...

Code: Alles auswählen

DATEADD('YY',DATEDIFF('YY',"Geburtsdatum",CURRENT_DATE),"Geburtsdatum")
... und dann die Tagesdifferenz?

Code: Alles auswählen

... WHERE DATEDIFF('DD',CURRENT_DATE, DATEADD('YY',DATEDIFF('YY',"Geburtsdatum",CURRENT_DATE),"Geburtsdatum")) <= 7
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 837
Registriert: Fr 28. Mär 2014, 10:41

Re: Wer hat diese Woche Geburtstag?

Beitrag von Freischreiber » Sa 18. Apr 2015, 17:10

Hi R!

Lange nichts gelesen von dir... :)

Einfacher, naja, es sieht auf jeden Fall frischer aus. Aber beide haben das Problem, daß sie zwischen Weihnachten und Neujahr nicht funktionieren. :|

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wer hat diese Woche Geburtstag?

Beitrag von RobertG » Sa 18. Apr 2015, 20:03

Hallo Freischreiber,

hier der Versuch einer Lösung für die interne HSQLDB, die ja kein DATEADD kennt:

Code: Alles auswählen

SELECT "Geburtsdatum" 
FROM "Tabelle" 
WHERE 
   DAYOFYEAR("Geburtsdatum") BETWEEN DAYOFYEAR(CURDATE()) AND DAYOFYEAR(CURDATE())+7 
   OR DAYOFYEAR("Geburtsdatum") < 7 - DAYOFYEAR(CAST(YEAR(CURDATE())||'-12-31' AS DATE)) + DAYOFYEAR(CURDATE())
Habe ich jetzt nicht intensiv getestet, scheint aber zu funktionieren. Natürlich habe ich mir besonders den Jahreswechsel angesehen. Mit der Addition von 7 werden dann natürlich insgesamt 8 Tage angezeigt.
Dann gibt es noch einen Haken mit dem Schaltjahr. Das ist allerdings ein bisschen viel Code, wenn es DATEADD nicht gibt:

Code: Alles auswählen

SELECT "Datum"
FROM "Tabelle"
WHERE
	CASE 
	WHEN DAYOFYEAR(CAST(YEAR("Datum")||'-12-31' AS DATE)) = 366 AND DAYOFYEAR("Datum") > 60 THEN DAYOFYEAR("Datum") - 1
	ELSE DAYOFYEAR("Datum")
	END
	BETWEEN 
	CASE
	WHEN DAYOFYEAR(CAST(YEAR(CURDATE())||'-12-31' AS DATE)) = 366 AND DAYOFYEAR(CURDATE()) > 60 THEN DAYOFYEAR(CURDATE()) - 1
	ELSE DAYOFYEAR(CURDATE())
	END
	AND
	CASE
	WHEN DAYOFYEAR(CAST(YEAR(CURDATE())||'-12-31' AS DATE)) = 366 AND DAYOFYEAR(CURDATE()) > 60 THEN DAYOFYEAR(CURDATE()) + 6
	ELSE DAYOFYEAR(CURDATE()) + 7
	END
	OR DAYOFYEAR("Datum") < 7 - DAYOFYEAR(CAST(YEAR(CURDATE())||'-12-31' AS DATE)) + DAYOFYEAR(CURDATE())
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Freischreiber
* LO-Experte *
Beiträge: 837
Registriert: Fr 28. Mär 2014, 10:41

Re: Wer hat diese Woche Geburtstag?

Beitrag von Freischreiber » So 19. Apr 2015, 10:39

Hallo Robert,

danke, werde ich auch mal testen - und versuchen zu verstehen.

Mir schwebt noch was ganz anderes vor, irgendwas mit modulo 365, Tage seit dem Geburtstag durch 365 und Rest nach Division auswerten, aber...

So vielleicht:

Code: Alles auswählen

SELECT "t-adressen"."Nachname", "t-adressen"."Vorname", "t-adressen"."Geburtsdatum" 
FROM "t-adressen" WHERE "t-adressen"."Geburtsdatum" IS NOT NULL AND 
 MOD ( DATEDIFF ( CURRENT_DATE, "t-adressen"."Geburtsdatum" ), 365 ) < 7
DATEDIFF ( <datetime value expr 1>, <datetime value expr 2> )

This special form of DATEDIFF does not have a field parameter and return the number of days between two dates.
(http://hsqldb.org/doc/guide/builtinfunctions-chapt.html

So kriege ich heute aber immer noch Treffer wie den 04.05.1938, also irgendwie geht das noch nicht richtig...

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wer hat diese Woche Geburtstag?

Beitrag von RobertG » So 19. Apr 2015, 21:02

Hallo Freischreiber,

mit DATEDIFF zählst Du genauso die Tage des 29.2. im Schaltjahr dazu. Zurückgezählt auf 1938 hast Du da über Modulo schon allein einen "Rest" von 19 - wenn Du den 19.4.1938 anzeigen willst. Gehe ich dann davon so weit runter wie zu dem von Dir angestrebten Rest, so < 7, dann lande ich folglich beim 1. bis 6.4.1938.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Freischreiber
* LO-Experte *
Beiträge: 837
Registriert: Fr 28. Mär 2014, 10:41

Re: Wer hat diese Woche Geburtstag?

Beitrag von Freischreiber » Mo 20. Apr 2015, 11:31

Hallo Robert,

Schaltjahre! Blödes Sonnensystem :lol:

Dann probier ich jetzt deine Lösung mal aus.

Danke und Gruß,
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten