it-swarm.com.de

Datum nicht einfügen - zeigt 0000-00-00 nach dem Einfügen

Ich versuche, ein Datum in eine MySQL-Tabelle einzufügen. Die SQL-Abfrage, mit der ich die Tabelle erstellt habe, lautet wie folgt:

CREATE TABLE IF NOT EXISTS DDD(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY UNIQUE, 
    datecolumn DATE NOT NULL , 
    open FLOAT, 
    high FLOAT, 
    low FLOAT, 
    close FLOAT, 
    volume INT)

Ich füge die Daten mit der folgenden SQL-Anweisung ein:

INSERT INTO DDD(datecolumn, open, high, low, close, volume)
VALUES(2011-05-26, 12.09, 13.31, 12.05, 13.09, 1293441)

Wenn ich danach die Daten auswähle und ansehe, sind die Einträge in der Datumsspalte

0000-00-00

Ich habe die Lösung von ausprobiert

Beim Importieren von CSVs in die MySQL-Tabelle bleiben Datumsfelder als 0000-00-

... aber es ergab sich folgender Fehler:

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'datecolumn DATE' at line 1

nach der folgenden Abfrage,

ALTER TABLE db.DDD MODIFY datecolumn datecolumn DATE;

Ich bin ein Anfänger in SQL und lerne jetzt. Könnte jemand etwas Licht ins Dunkel bringen, was ich falsch mache?

5
RussellB

Setzen Sie das Datum in Anführungszeichen:

INSERT INTO DDD(datecolumn, open, high, low, close, volume) 
VALUES('2011-05-26', 12.09, 13.31, 12.05, 13.09, 1293441)

MySQL wird stillschweigend etwas Mathematik mit 2011-05-26 Gemacht haben und seine Schlüpfer in eine Wendung gebracht haben.

Es warnt Sie jedoch:

mysql> insert into d VALUES(2011-05-26);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1264 | Out of range value for column 'datecolumn' at row 1 |
+---------+------+-----------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Ohne Anführungszeichen fügt MySQL im Wesentlichen die Ganzzahl 1980 (2011 minus 05 minus 26) Als Datum ein, da es als Mathematik behandelt wird:

mysql> select 2011-05-26;
+------------+
| 2011-05-26 |
+------------+
|       1980 |
+------------+
1 row in set (0.00 sec)

mysql>
11
Philᵀᴹ