Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL Abfrage und "leeres Datum"

1,372 views
Skip to first unread message

Karin Schneider

unread,
Jul 16, 2002, 5:41:06 AM7/16/02
to
Hallo, ich bitte um Hilfe bei einer SQL Selektion:

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?

Ralf Mimoun

unread,
Jul 16, 2002, 5:48:56 AM7/16/02
to
Moin!

"Karin Schneider" <KaS...@gmx.de> schrieb:

WHERE StartDate<='''+formatDateTime('yyyy-mm-dd',VerglDate)+''' OR
StartDate=NULL


Bye, Ralf


Andreas Schmidt

unread,
Jul 16, 2002, 7:50:19 AM7/16/02
to

"Ralf Mimoun" <r.mi...@rapid-software.de> schrieb im Newsbeitrag
news:ah0q3h$t7l$1...@newsreader2.netcologne.de...

Ähem, es muss heissen *IS* NULL:

'WHERE StartDate<='+QuotedStr(formatDateTime('yyyy-mm-dd',VerglDate))+' OR
StartDate IS NULL'

Andreas


Ralf Mimoun

unread,
Jul 16, 2002, 7:57:31 AM7/16/02
to
Moin!

"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


Andreas Schmidt

unread,
Jul 16, 2002, 8:23:10 AM7/16/02
to

"Ralf Mimoun" <r.mi...@rapid-software.de> schrieb im Newsbeitrag
news:ah11kj$9vv$1...@newsreader2.netcologne.de...
> "Andreas Schmidt" <a_j_s...@rocketmail.com> schrieb:

> > Ä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


Mario Rothacher

unread,
Jul 16, 2002, 9:37:49 AM7/16/02
to
Andreas Schmidt wrote:

> 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

Marian Aldenhövel

unread,
Jul 17, 2002, 6:35:10 AM7/17/02
to
Hi,

> 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

0 new messages