mit
Where 'StartDate<='''+formatDateTime('yyyy-mm-dd',VerglDate)+''''
bekomme ich wunderbar alle Datensätze mit einem kleineren Datum als das
VerglDate.
Wenn jedoch das Datumsfeld "StartDate" im Datensatz noch nicht definiert
ist, also "leer" ist, wird es nicht selektiert obwohl es eigentlich vom Wert
her kleiner ist.
Wie kann ich ein "leeres" Datumsfeld selektieren?
"Karin Schneider" <KaS...@gmx.de> schrieb:
WHERE StartDate<='''+formatDateTime('yyyy-mm-dd',VerglDate)+''' OR
StartDate=NULL
Bye, Ralf
Ähem, es muss heissen *IS* NULL:
'WHERE StartDate<='+QuotedStr(formatDateTime('yyyy-mm-dd',VerglDate))+' OR
StartDate IS NULL'
Andreas
"Andreas Schmidt" <a_j_s...@rocketmail.com> schrieb:
...
> > WHERE StartDate<='''+formatDateTime('yyyy-mm-dd',VerglDate)+''' OR
> > StartDate=NULL
>
> Ähem, es muss heissen *IS* NULL:
>
> 'WHERE StartDate<='+QuotedStr(formatDateTime('yyyy-mm-dd',VerglDate))+' OR
> StartDate IS NULL'
Es _muss_ nicht. Es kommt aufs DB-System an.
Bye, Ralf
> > Ähem, es muss heissen *IS* NULL:
> >
> > 'WHERE StartDate<='+QuotedStr(formatDateTime('yyyy-mm-dd',VerglDate))+'
OR
> > StartDate IS NULL'
>
> Es _muss_ nicht. Es kommt aufs DB-System an.
*IS* NULL ist SQL/92 Standard.
Sehr wenige Datenbanken haben die Syntax "= NULL" alternativ nachgerüstet.
Access2000 und SQL-Server 2000 reagieren überigens *sehr seltsam*:
SELECT * FROM tabelle WHERE feld IS NULL : arbeitet korrekt
SELECT * FROM tabelle WHERE feld = NULL : 0 Datensätze
daher: "= NULL" ist Teufelswerk, weil man nie so genau weiss,
was dabei rauskommt :-)
Andreas
> Access2000 und SQL-Server 2000 reagieren überigens *sehr seltsam*:
>
> SELECT * FROM tabelle WHERE feld IS NULL : arbeitet korrekt
> SELECT * FROM tabelle WHERE feld = NULL : 0 Datensätze
>
> daher: "= NULL" ist Teufelswerk, weil man nie so genau weiss,
> was dabei rauskommt :-)
Wieso? NULL entspricht doch undefiniert.
Undefiniert = Undefiniert? Nö, also kein Datensatz!
Nur meine Meinung ;-)
cu
Mario
> Wenn jedoch das Datumsfeld "StartDate" im Datensatz noch nicht definiert
> ist, also "leer" ist
Dann hat es einen besonderen Wert, genannt NULL. Und der ist nicht größer
und nicht kleiner als jedes andere Datum sondern einfach anders.
> obwohl es eigentlich vom Wert her kleiner ist.
Je nachdem was Du für die Anzeige benutzt, bekommst Du den Wert angezeigt,
der einer 0 (also einem eingetragenen Wert von 0, und eben nicht NULL)
entspricht, oder eben die Anzeige NULL. Als TDateTime interpretiert ist 0
zwar der 31.12.1899, aber NULL ist eben nicht kleiner als zum Beispiel
heute.
> Wie kann ich ein "leeres" Datumsfeld selektieren?
Indem Du explizit NULL ebenfalls einschließt:
WHERE (Datum<:Datum) OR (Datum IS NULL);
Alternativ kannst Du dafür sorgen, daß das Datumsfeld nicht NULL bleibt
sondern immer irgendetwas zugewiesen bekommt, und sei es 0.
Außerdem noch der Tip statt des direkten Einbaus eines Datumswerts in
SQL-Statement wie mit Deinem FormatDateTime besser einen Parameter zu
benutzen (":Datum" im Beispiel). Damit wird Du unabhängiger von
Einstellungen für das Datumsformat und den verschiedenen Ansichten
verschiedener Datenbanksysteme darüber.
Ciao, MM
--
Marian Aldenhövel, Hainstraße 8, 53121 Bonn
Mein Flug um die Welt (aktuelle Position: San Diego)
http://www.marian-aldenhoevel.de/ATW