mySQL: Abfrage, ob Zeit gesetzt
Peter Mairhofer
- datenbank
Hallo,
mySQL scheint mich nicht zu mögen.
In einer Datenbank hab' ich ein DATETIME Feld. Ich will nun alle Zeilen herausfiltern, bei denen das DATETIME Feld gesetzt ist.
Ich hab schon alles was mir eingefallen ist probiert, aber es will nicht funktionieren.
Offensichtlich gehen die Abfragen bei DATETIME Feldern anders. Es funktioniert nicht mit NULL, 0, 0000-00-00 00:00. Da phpmyadmin leere DATETIME Felder als NULL anzeigt, müsste die richtige Syntax lautet: SELECT * FROM table WHERE datetime != NULL.
Kann mir jemand helfen?
Vielen Dank!
Peter
Hi,
Da phpmyadmin leere DATETIME Felder als NULL anzeigt, müsste die richtige Syntax lautet: SELECT * FROM table WHERE datetime != NULL.
nein. Untersuche anhand der MySQL-Doku, wie man mit NULL-Werten arbeitet. Es gibt dazu ein Kapitel (3.3.4.6).
Cheatah
Nolimetongere,
Quelle: http://www.mysql.com/doc/de/Problems_with_NULL.html
------
A.5.3 Probleme mit NULL-Werten
Das Konzept des NULL-Wert ist eine häufige Quelle der Verwirrung für SQL-Anfänger. Diese denken häufig, NULL sei dasselbe wie eine leere Zeichenkette ''. Das ist nicht der Fall! So sind zum Beispiel folgende Statements grundverschieden:
mysql> INSERT INTO meine_tabelle (Telefon) VALUES (NULL);
mysql> INSERT INTO meine_tabelle (Telefon) VALUES ("");
Beide Statements fügen einen Wert in die Telefon-Spalte ein, aber das erste fügt einen NULL-Wert und das zweite eine leere Zeichenkette ein. Die Bedeutung des ersten ist etwa Telefonnummer unbekannt'' und des zweiten
Keine Telefonnummer''.
In SQL ist der NULL-Wert im Vergleich mit jedem anderen Wert immer UNWAHR (false), selbst im Vergleich mit NULL. Ein Ausdruck, der NULL enthält, erzeugt immer einen NULL-Wert, ausser wenn es in der Dokumentation der Operatoren und Funktionen, die im Ausdruck beteiligt sind, anders angegeben ist. Alle Spalten im folgenden Beispiel geben NULL zurück:
mysql> SELECT NULL,1+NULL,CONCAT('unsichtbar',NULL);
Wenn Sie nach Spaltenwerten suchen, die NULL sind, können Sie nicht =NULL benutzen. Folgendes Statement gibt keine Zeilen zurück, weil ausdruck = NULL für jeden beliebigen Ausdruck UNWAHR (false) ist:
mysql> SELECT * FROM meine_tabelle WHERE Telefon = NULL;
Um nach NULL-Werten zu suchen, müssen Sie IS NULL benutzen. Folgende Beispiele zeigen, wie Sie die NULL-Telefonnummer und die leere Telefonnummer finden:
mysql> SELECT * FROM meine_tabelle WHERE Telefon IS NULL;
mysql> SELECT * FROM meine_tabelle WHERE Telefon = "";
In MySQL können Sie - wie bei vielen anderen SQL-Servern - keine Spalten indexieren, die NULL-Werte enthalten dürfen. Sie müssen solche Spalten aus NOT NULL deklarieren. Sie dürfen in eine indexierte Spalte keine NULL-Werte einfügen.
Wenn Sie Daten mit LOAD DATA INFILE einlesen, werden leere Spalten mit '' aktualisiert. Wenn Sie einen NULL-Wert in einer Spalte haben wollen, müssen Sie in der Textdatei \N benutzen. Unter manchen Umständen kann auch das Literalwort 'NULL' benutzt werden. See section 7.4.9 LOAD DATA INFILE-Syntax.
Wenn Sie ORDER BY benutzen, werden NULL-Werte zuerst angezeigt. Wenn Sie mit DESC in absteigender Reihenfolge sortieren, werden NULL-Werte zuletzt angezeigt. Wenn Sie GROUP BY benutzen, werden alle NULL-Werte als gleich betrachtet.
Um die Handhabung von NULL zu erleichtern, können Sie die IS NULL- und IS NOT NULL-Operatoren und die IFNULL()-Funktion benutzen.
Bei manchen Spaltentypen werden NULL-Werte besonders behandelt. Wenn Sie NULL in die erste TIMESTAMP-Spalte einer Tabelle einfügen, werden das aktuelle Datum und die aktuelle Zeit eingefügt. Wenn Sie NULL in eine AUTO_INCREMENT-Spalte einfügen, wird die nächste Zahl in der Zahlenfolge eingefügt.
------
Zebulon
The Interim Polytoximonium