MySQL: Wstaw datetime do innego pola datetime

Mam tabelę z kolumną DATETIME. Chciałbym wybrać tę wartość datetime i wstawić ją do innej kolumny.

Zrobiłem to (uwaga: '2011-12-18 13: 17: 17' to wartość, którą dał mi poprzedni SELECT z pola DATETIME):

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

I get

    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, rozumiem, że źle jest wstawiać nie cytowany ciąg, ale czy DATETIME jest tylko ciągiem? Co tam włożyłem? Wszystko, czego chcę, to niezawodne przeniesienie istniejącej wartości na nowe pole datetime...

EDIT:

Powodem, dla którego pytam jest to, że mam tę specjalną definicję, DATETIME, i jakoś myślałem, że daje mi to pewne Bezpieczeństwo i inne korzyści podczas obsługi dat. Teraz wydaje się, że jest to po prostu wyspecjalizowany VARCHAR, że tak powiem.

Dzięki za odpowiedzi, wydaje się, że jest to rzeczywiście zamierzone zachowanie.

Author: ROMANIA_engineer, 2011-12-18

4 answers

Zgodnie z dokumentacją MySQL, powinieneś być w stanie zamknąć ten łańcuch datetime w pojedynczych cudzysłowach ('YYYY-MM-DD HH:MM:SS') i powinno działać. Zobacz tutaj: literały daty i czasu

Więc w Twoim przypadku komenda powinna wyglądać następująco:

UPDATE products SET former_date='2011-12-18 13:17:17' WHERE id=1
 63
Author: Mike Nakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 17:36:35

Try

    UPDATE products SET former_date=20111218131717 WHERE id=1

Alternatywnie możesz użyć funkcji STR_TO_DATE(Zobacz STR_TO_DATE (str,format)).

 8
Author: Atonewell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-07 12:00:03

Dla MYSQL spróbuj tego

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

Weryfikacja-

Select * from table1
output-datetime= 2014-12-01 00:00:00

 7
Author: GKV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-08 06:37:45

Jeśli nie potrzebujesz wartości DATETIME w pozostałej części kodu, bardziej wydajne, proste i bezpieczne byłoby użycie zapytania aktualizacji z pod-select, coś w rodzaju

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

Lub w przypadku, gdy jest w tym samym wierszu w jednej tabeli, po prostu

UPDATE products SET t=f WHERE id=42;
 0
Author: Stefan L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 13:41:45