web-dev-qa-db-fra.com

MySQL: Insère datetime dans un autre champ datetime

J'ai une table avec une colonne DATETIME. Je voudrais sélectionner cette valeur datetime et l’insérer dans une autre colonne.

J'ai fait ceci (note: '2011-12-18 13:17:17' est la valeur que l'ancien SELECT m'a donnée dans le champ DATETIME):

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

et obtenir

    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, je comprends que ce n’est pas bien de mettre une chaîne non citée, mais DATETIME est-il juste une chaîne en premier lieu? Qu'est-ce que do j'y ai mis? Tout ce que je veux, c’est transférer de manière fiable la valeur existante dans un nouveau champ datetime ...

MODIFIER:

La raison pour laquelle je pose cette question est la suivante: j’ai cette définition spéciale, DATETIME, et j’ai pensé qu’elle me conférait une sécurité et d’autres avantages lors du traitement des dates. Maintenant, il semble que ce soit simplement un VARCHAR spécialisé, pour ainsi dire.

Merci pour vos réponses, il semble que ce soit effectivement le comportement souhaité.

37
marimba

Selon la documentation MySQL, vous devriez pouvoir simplement mettre cette chaîne datetime entre guillemets simples ('AAAA-MM-JJ HH: MM: SS') et cela devrait fonctionner. Regardez ici: Date et heure littérales

Donc, dans votre cas, la commande devrait être la suivante:

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

Essayer 

    UPDATE products SET former_date=20111218131717 WHERE id=1

Vous pouvez également utiliser la fonction STR_TO_DATE (voir STR_TO_DATE (str, format) ).

8
Atonewell

pour MYSQL essayez ceci

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

vérification- 

sélectionnez * de table1
output- datetime = 2014-12-01 00:00:00

8
GKV

Si vous n'avez pas besoin de la valeur DATETIME dans le reste de votre code, il serait plus efficace, simple et sécurisé d'utiliser une requête UPDATE avec une sous-sélection, quelque chose comme:

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

ou au cas où il est dans la même ligne dans une seule table, juste

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