2016-11-15 2 views
-1

Ich versuche, eine Tabelle mit einer Spalte im Datumsformat zu erstellen. Unten ist mein Code dafür:MySQL: Warum zeigt das Datumsobjekt immer "0"?

CREATE TABLE Sales 
    (`CustomerID` int, `mydate` date, `amount` float(2)) 
; 

INSERT INTO Sales 
    (customerID, mydate, amount) 
VALUES 
    (10, 8/2/96, 2540.78), 
    (20, 1/30/99, 1800.54), 
    (30,7/14/95, 460.33), 
    (10, 6/29/98,2400), 
    (50, 2/3/98, 600.28), 
    (60, 3/2/98, 720), 
    (10, 7/6/98, 150) 
; 

Aber mein Ergebnis ist immer:

10|0|2540.78                                
20|0|1800.54                                
30|0|460.33                                
10|0|2400.0                                
50|0|600.28                                
60|0|720.0                                 
10|0|150.0 

Also im Grunde die Datumsspalte nur 0.

zeigt ich dieses Online-IDE bin mit zu Hilf mir, diesen Code auszuführen (es ist eine Online-IDE, die MySQL ausführt, glaube ich): https://www.tutorialspoint.com/execute_sql_online.php

Ich habe versucht, den Datentyp zu "timestamp" oder "datet "Aber keiner von ihnen funktioniert. Jede Hilfe wird geschätzt!

+1

mysql Standard-Datumsformat für Einfügen ist YYYY-MM-DD, also als String, also 8/2/96 wäre '1996-8-2' dies erlaubt MySQL implizit die Zeichenfolge auf ein Datum zu werfen; Andernfalls versucht die Datenbank, Mathe zu berechnen, indem sie den 8/2/96 verwendet und diesen in ein Datum umwandelt, das 0 zurückgibt. – xQbert

Antwort

4

Verwenden Sie das richtige mySQL Datumsformat und es sollte funktionieren ..

http://dev.mysql.com/doc/refman/5.7/en/datetime.html

“... Der DATE-Typ für Werte mit einem Datumsteil aber keine Zeit Teil verwendet wird. MySQL abruft und anzeigt DATE Werte in 'YYYY-MM-DD' Format. unterstützt wird der Bereich '1000.01.01' auf '9999-12-31' ....“

INSERT INTO Sales 
    (customerID, mydate, amount) 
VALUES 
    (10, '1996-8-2', 2540.78), 
    (20, '1999-1-30', 1800.54), 
    (30, '1995-7-14', 460.33), 
    (10, '1998-6-29', 2400), 
    (50, '1998-2-3', 600.28), 
    (60, '1998-3-2', 720), 
    (10, '1998-7-6', 150) 

auf eine zusätzliche Note, Mengen nicht speichern (cur als Floats. Alles, wo Sie eine bestimmte Anzahl von Dezimalstellen haben möchten und keine Fehler in der Fließkomma-Mathematik haben, muss als NUMERIC oder DECIMAL mit Skalierung und Genauigkeit gespeichert werden. Anstatt also amount float(2) verwenden Sie amount numeric(10,2) (setzen Sie den Wert 10 auf den Maximalwert links neben den geplanten Dezimalzahlen, und fügen Sie dann 5 hinzu. 3 wegen Wachstum 2 für die Dezimalstellen (fügen Sie mehr hinzu, wenn Sie mehr Präzision benötigen) . dezimal erlaubt und 2 Dezimalstellen

einfach gesagt: Gleitkomma verwenden oder doppelte Datentypen, wann immer Sie eine spätere spezifische Werte für Dezimalzahlen bittet um Ärger behalten wollen

Denken Sie an Kelle und Doppel-Datentypen, wenn. Präzision spielt keine Rolle, wie große Zahlen wie 6.22 * 10^23 (avagadro's number) in der Regel nichts nach 6.22 Sehr große n interessieren In der Wissenschaft gibt es nur wenige oder sehr kleine Zahlen, die sinnvoll sind, aber selten, wenn es um Währungen geht, bei denen es auf Präzision ankommt.

Mehr darauf:

Arbeits SQL Fiddle

+0

Vielen Dank für Ihre Antwort, xQbert! Aber sind die Anführungszeichen um die erforderlichen Daten? – alwaysaskingquestions

+2

Ja, sonst ist es ein mathematischer Ausdruck;) –

+0

Wow. gut zu wissen! Ich habe definitiv die falschen Dinge gegoogelt. Vielen Dank, Jungs! :) – alwaysaskingquestions

Verwandte Themen