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.
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
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)).
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
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;
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