:: DEVELOPER ZONE
Das Format eines DATE-Werts ist 'YYYY-MM-DD'. Gemäß ANSI-SQL
ist kein anderes Format zulässig. Sie sollten dieses Format in
UPDATE-Ausdrücken und in der WHERE-Klausel von
SELECT-Statements benutzen. Beispiel:
mysql> SELECT * FROM tabelle WHERE date >= '1997-05-05';
Aus Gründen der Annehmlichkeit konvertiert MySQL automatisch ein Datum in
eine Zahl, wenn das Datum in einem numerischen Zusammenhang benutzt wird
(und umgekehrt). MySQL unterstützt ausserdem ein ``entspanntes''
Zeichenkettenformat beim Aktualisieren und in einer WHERE-Klausel,
die ein Datum mit einer TIMESTAMP-, DATE- oder einer
DATETIME-Spalte vergleicht. (Entspannt heißt hierbei, dass jedes
beliebige Satzzeichen als Trennzeichen zwischen Bestandteilen benutzt
werden darf. Beispielsweise sind '1998-08-15' und
'1998#08#15' äquivalent.) MySQL kann auch eine Zeichenkette
umwandeln, die keine Trennzeichen enthält (wie '19980815'),
vorausgesetzt, dass diese als Datum einen Sinn ergibt.
Das spezielle Datum '0000-00-00' kann als '0000-00-00'
gespeichert und abgerufen werden. Wenn man ein '0000-00-00'-Datum
über MyODBC benutzt, wird es automatisch in NULL
umgewandelt (MyODBC-Version 2.50.12 und höher), weil ODBC diese
Art von Datum nicht handhaben kann.
Weil MySQL die oben genannten Umwandlungen durchführt, funktionieren folgende Statements:
mysql> INSERT INTO tabelle (idate) VALUES (19970505);
mysql> INSERT INTO tabelle (idate) VALUES ('19970505');
mysql> INSERT INTO tabelle (idate) VALUES ('97-05-05');
mysql> INSERT INTO tabelle (idate) VALUES ('1997.05.05');
mysql> INSERT INTO tabelle (idate) VALUES ('1997 05 05');
mysql> INSERT INTO tabelle (idate) VALUES ('0000-00-00');
mysql> SELECT idate FROM tabelle WHERE idate >= '1997-05-05';
mysql> SELECT idate FROM tabelle WHERE idate >= 19970505;
mysql> SELECT mod(idate,100) FROM tabelle WHERE idate >= 19970505;
mysql> SELECT idate FROM tabelle WHERE idate >= '19970505';
Folgendes jedoch funktioniert nicht:
mysql> SELECT idate FROM tabelle WHERE STRCMP(idate,'19970505')=0;
STRCMP() ist eine Zeichenkettenfunktion, daher wird idate in
eine Zeichenkette umgewandelt und ein Zeichenkettenvergleich durchgeführt.
MySQL wandelt '19970505' nicht in ein Datum um und führt einen
Datumsvergleich durch.
Beachten Sie, dass MySQL nicht prüft, ob ein Datum korrekt ist oder nicht.
Wenn Sie ein falsches Datum wie '1998-2-31' speichern, wird das
falsche Datum gespeichert. Wenn das Datum in keinen vernünftigen Wert
umgewandelt werden kann, wird 0 im DATE-Feld gespeichert. Das
ist hauptsächlich eine Sache der Geschwindigkeit, und wir sind der Meinung,
dass es Sache der Applikation und nicht des Servers ist, Datumsangaben zu
überprüfen.
© 1995-2005 MySQL AB. All rights reserved.
