Im Prinzip werden Veranstaltungen gesucht, deren Zeitraum sich mit einem angegebenen Zeitraum überschneiden.
Das es sich dabei um Jahresanfang und Ende eines bestimmten Jahres handelt, ist nur ein Spezialfall, den man im
SQL nicht gesondert behandeln muss.
Sind 'datumstart' und 'datumende' reine Datumsfelder, benötigt man den Zeitanteil bei den Parametern nicht.
Delphi-Quellcode:
var Jahr := StrToInt(ComboBoxJahr.Text);
Query.SQL.Text := '
select * from verabstaltungen where (datumstart <= :bis) and ((datumende is null) or (datumende >= :von))';
Query.ParamByName('
von').AsDateTime := EncodeDateTime(Jahr, 1, 1, 0, 0, 0, 0);
Query.ParamByName('
bis').AsDateTime := EncodeDateTime(Jahr, 12, 31, 23, 59, 59, 999);