webentwicklung-frage-antwort-db.com.de

MySQL: Fügen Sie datetime in ein anderes datetime-Feld ein

Ich habe eine Tabelle mit einer DATETIME-Spalte. Ich möchte diesen datetime Wert vorwählen und ihn in eine andere Spalte EINFÜGEN.

Ich habe dies getan (Anmerkung: '2011-12-18 13:17:17' ist der Wert, den die frühere SELECT-Funktion mir im Feld DATETIME gegeben hat):

UPDATE products SET former_date=2011-12-18 13:17:17 WHERE id=1

und bekomme

    1064 - 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 '13:17:17 WHERE itemid=1' at line 1

Ok, ich verstehe, dass es falsch ist, einen String ohne Anführungszeichen einzufügen, aber ist DATETIME überhaupt nur ein String? Was mache ich da rein? Ich möchte nur den vorhandenen Wert zuverlässig in ein neues datetime-Feld übertragen ...

BEARBEITEN:

Der Grund, den ich frage, ist: Ich habe diese spezielle Definition, DATETIME, und irgendwie dachte ich, dass sie mir Sicherheit und andere Vorteile beim Umgang mit Daten bietet. Jetzt scheint es sozusagen nur eine spezialisierte VARCHAR zu sein.

Vielen Dank für Ihre Antworten, es scheint, dass dies tatsächlich das beabsichtigte Verhalten ist.

37
marimba

Gemäß der MySQL-Dokumentation sollten Sie diese Datetime-Zeichenfolge einfach in einfache Anführungszeichen ('JJJJ-MM-TT HH: MM: SS') einschließen können. Schauen Sie hier: Datums- und Zeitangaben

In Ihrem Fall sollte der Befehl folgendermaßen lauten:

UPDATE products SET former_date='2011-12-18 13:17:17' WHERE id=1
70
Mike Nakis

Versuchen 

    UPDATE products SET former_date=20111218131717 WHERE id=1

Alternativ können Sie die STR_TO_DATE-Funktion verwenden (siehe STR_TO_DATE (str, format) ).

8
Atonewell

für MYSQL versuchen Sie dies

INSERT INTO1 (myDatetimeField) WERTE (STR_TO_DATE ('12 -01-2014 00:00:00 ','% m-% d-% Y% H:% i:% s ');

nachprüfung- 

wählen Sie * aus Tabelle1
ausgabe-datetime = 2014-12-01 00:00:00

8
GKV

Wenn Sie den DATETIME-Wert nicht für den Rest Ihres Codes benötigen, wäre es effizienter, einfacher und sicherer, eine UPDATE-Abfrage mit einem Sub-Select zu verwenden

UPDATE products SET t=(SELECT f FROM products WHERE id=17) WHERE id=42;

oder falls es in derselben Zeile in einer einzigen Tabelle liegt, einfach

UPDATE products SET t=f WHERE id=42;
0
Stefan L