MySQL: вставить datetime в другое поле datetime - PullRequest
40 голосов
/ 18 декабря 2011

У меня есть таблица со столбцом DATETIME. Я хотел бы выбрать это значение даты и времени и вставить его в другой столбец.

Я сделал это (примечание: «2011-12-18 13:17:17» - это значение, которое прежний SELECT дал мне из поля DATETIME):

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

и получите

    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

Хорошо, я понимаю, что неправильно помещать туда строку без кавычек, но является ли DATETIME просто строкой? Что сделать я положил туда? Все, что я хочу, это надежно перенести существующее значение в новое поле даты и времени ...

EDIT:

Причина, по которой я спрашиваю: у меня есть это специальное определение, DATETIME, и почему-то я подумал, что оно дает мне некоторую безопасность и другие преимущества при обработке дат. Теперь, кажется, это просто специализированный VARCHAR, так сказать.

Спасибо за ваши ответы, похоже, это действительно предполагаемое поведение.

Ответы [ 4 ]

77 голосов
/ 18 декабря 2011

Согласно документации MySQL, вы должны иметь возможность просто заключить эту строку даты-времени в одинарные кавычки («ГГГГ-ММ-ДД ЧЧ: ММ: СС»), и она должна работать.Посмотрите здесь: Литералы даты и времени

Итак, в вашем случае команда должна выглядеть следующим образом:

UPDATE products SET former_date='2011-12-18 13:17:17' WHERE id=1
8 голосов
/ 08 января 2015

для MYSQL попробуйте

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

проверка-

выбрать * из таблицы1
output-datetime = 2014-12-01 00: 00: 00

8 голосов
/ 18 декабря 2011

Попробуйте

    UPDATE products SET former_date=20111218131717 WHERE id=1

В качестве альтернативы вы можете захотеть использовать функцию STR_TO_DATE (см. STR_TO_DATE (str, format) ).

0 голосов
/ 19 марта 2018

Если вам не нужно значение DATETIME в остальной части кода, было бы более эффективно, просто и безопасно использовать запрос UPDATE с дополнительным выбором, например,

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

или, если он находится в одной строке в одной таблице, просто

UPDATE products SET t=f WHERE id=42;
...