Datumswert SQL konform konvertieren

Sie möchten nach einem bestimmten Datumseintrag suchen. Ausgangsbasis ist ein Datenbankfeld vom Typ Date. NexusDB z.B. erwartet die Abfrage dann wie folgt

select * from mytable where Datumsfeld=Date’Jahr-Monat-Tag‘

Nun liegt der Datumswert aber z.B. wie folgt in der Tabelle mit einem Feld vom Typ Datum vor:

11.08.2005 und damit kann Nexus leider nichts anfangen.

Folgende Funktion überführt nun diesen Datumsausdruck in den von NexusDB erwarteten Format:

function ConvertDateToSqlDate(datum:TDate):String;
var monat,tag:String;
begin
monat:=IntToStr(MonthOf(datum));
IF length(monat)=1 then monat:=’0’+monat;
tag:=IntToStr(DayOf(datum));
IF length(tag)=1 then tag:=’0’+tag;
ConvertDateToSqlDate:=IntToStr(YEarOf(datum))+‘-‚+monat+‘-‚+tag;
end;

Aus 11.08.2005 wird dann 2005-08-11

Der ganze Ausdruck heisst dann z.B. in Delphi

’select * from mytable where datumsfeld=date’+QuotedStr(ConvertDateToSqlDate(mytable.datefield));

was dann wie folgt im Klartext aussieht:

select * from mytable where datumsfeld=date’2007-08-11′

Bei anderen Datenbanken kann dies ähnlich oder auch anders sein, aber vielleicht hilft Ihnen die obige Vorgehensweise auch in ähnlichen Fällen mit ein klein wenig Anpassung.

Noch einfacher geht das Ganze übrigens wie folgt :

function ConvertDateToSqlDate(datum:TDate):String;
begin
Re
sult := SysUtils.FormatDateTime(‚yyyy“-„mm“-„dd‘, Datum);
end


Verwandte Themen: