Entwickler-Ecke

Datenbanken - Datumsfeld auswählen


D. Annies - Sa 26.12.09 12:33
Titel: Datumsfeld auswählen
Hi, Delpher,

ich möchte mit dem SQL von D6 verschiedene Geburtstagsabfragen starten, z.B.

1. select name, vorname, gebdat, klasse FROM "%s" S WHERE (month(gebdat) = 12) ORDER by
gebdat
2. select name, vorname, gebdat, klasse FROM "%s" S WHERE (month(gebdat) = 12) or
(month(gebdat) = 1) ORDER by gebdat
3. select name, vorname, gebdat, klasse FROM "%s" S WHERE (gebdat > 1995/12/12) and
(gebdat < 1995/12/30) ORDER by gebdat

Nr. 1 und 2 funktionieren so auch, obwohl die Sortierfolge nach gebdat gewöhnungsbedürftig ist.

Nr. 3 funzt so nicht, ohne Fehlermeldung, es werden nur keine Daten gefunden.

Wer kann da helfen?
Gruß, Detlef


Niko S. - Sa 26.12.09 13:34

vielleicht nach dem Zeitstempel auflösen und nachgucken ob über und unter der "Sekundenzahl" ist?
Aber ich weiß jetzt nicht aus dem Stehgreif wie dafür der Befehl lautet, aber das wäre eine Möglichkeit ;x


D. Annies - Sa 26.12.09 21:24

Danke, Niko,

hilft mir leider noch nicht weiter.
Habe mich bisher aber auch nur erfolglos weiter bemüht =
Stochern im Nebel, wenn man die Syntax nicht kennt ::<

Gruß, Detlef


JDF - Di 29.12.09 20:02

Hallo Detlef,

in deiner 3. Abfrage könnte das Problem an der Datumsinterpretation deiner Datenbank liegen.
Die Datumsangaben sollten als Zeichenkette in Hochkommas eingeschlossen sein.
Einige Datenbanken akzeptieren auch die Darstellung '2009-12-30'.
Wenn die geforderte Darstellung für die Datenbank unklar ist, kannst Du die Datumsgrenzen auch als Parameter eingeben.

select name, vorname, gebdat, klasse FROM "%s" S WHERE (gebdat > :DATUM_VON) and
(gebdat < :DATUM_BIS) ORDER by gebdat

Query1.ParamByName('DATUM_VON').AsDate := StrToDate('12.12.1995');
Query1.ParamByName('DATUM_BIS').AsDate := StrToDate('30.12.1995');

Du kannst in der Hilfe Infos zu ParamByName finden.


Gruß
Jürgen


D. Annies - Sa 09.01.10 18:04

Hi, Jürgen,

vielen Dank für deine Lösung - ich habe sie leider erst jetzt gesehen.
Es sollte aber eine Lösung ohne Parameter sein. Die habe ich mittlerweile sogar selbst gefunden, nach dem Motto: morgens aufgewacht - äh, probier doch mal das hier:

select name, vorname, gebdat, klasse FROM "%s" S WHERE (month(gebdat) = 12) and
(day(gebdat) between 20 and 31) or (month(gebdat) = 1) and
(day(gebdat) between 1 and 7) ORDER by gebdat

und die Zahlen kann ich dann jeweils editieren.

Bis denn mal,
Detlef


mkinzler - Mo 11.01.10 13:18

Zitat:
Es sollte aber eine Lösung ohne Parameter sein.
Und warum das?


D. Annies - Do 21.01.10 20:24

Damit ich den Befehl aus einer Textdatei heraus aufrufen und ausführen kann.
(Habe erst eben deine Frage gesehen)
Det