In MySQL/MariaDB kann man mit "SET @foo = 'bar';" eine temporäre Variable setzen. Diese ist innerhalb der aktuellen Connection gültig, d.h. solange sie gehalten wird, kann man mit @foo auf 'bar' zurückgreifen. Die Connections für MySQL und MariaDB werden in LO für die ganze aktuelle Laufzeit gehalten, außer man beendet sie explizit. Wenn man innerhalb einer Abfrage immer auf denselben Wert ("DayOfYear(DATE_ADD( CURRENT_DATE(), INTERVAL 8 DAY))") zurückgreift, ist es effizienter ihn vorher als Variable zu speichern.
Wenn die DB keine Variablen unterstützt, musst Du für jede Zeile rechnen. Statt @DateLimit setzt Du dann einfach "DayOfYear(DATE_ADD( CURRENT_DATE(), INTERVAL 8 DAY))" ein - oder Du verwendest eine eigene Tabelle, in der Du die Variablenwerte vorübergehend speicherst.
Eine andere Lösung wäre noch einen String-Vergleich zu machen, da weiß ich aber nicht wie das die unterschiedlichen Datenbanken machen. Für SQLite funktioniert z.B.:
Code: Alles auswählen
Select * from MeineTabelle
where (
substr(date(), 1,4) || substr(Geburtsdatum,5) between date('now' ,'+1 day') and date('now' ,'+8 day')
or
(substr(date(), 1,4) + 1) || substr(Geburtsdatum,5) between date('now' ,'+1 day') and date('now' ,'+8 day')
)
and Geburtsdatum <> '' and substr(Geburtsdatum,1,4) between '1920' and '2020';
Dazu MUSS das Datum im Format "yyyy-mm-dd" gespeichert sein. Zu beachten ist dabei, dass das eben keine echten Datumsvergleiche sind, daher auch das
and Geburtsdatum <> '' ... am Ende, wobei die Datenqualität hier entscheidend ist. "5936-88-45" ist auch im "yyyy-mm-dd"-Format ... aber Nonsens. "1976-9-25" würde z.B. am 27. Dezember einen Treffer ergeben, da
substr(date(), 1,4) || substr("1976-9-25" ,5) "2020-9-25" ergibt und '2020-
9' im Alphabet zwischen '
2020-12-28' und '
2021-01-03' liegt.
... tja und dann gibt's sicher auch noch einige andere Lösungen
