it-swarm-pt.tech

MySQL: Inserir datetime em outro campo de data e hora

Eu tenho uma tabela com uma coluna DATETIME. Eu gostaria de SELECT este valor de data e hora e inseri-lo em outra coluna.

Eu fiz isso (nota: '2011-12-18 13:17:17' é o valor que o antigo SELECT me deu do campo DATETIME):

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

e pegue 

    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, eu entendo que é errado colocar uma string sem aspas, mas DATETIME é apenas uma string em primeiro lugar? O que do eu coloco lá? Tudo que eu quero é transferir de forma confiável o valor existente para um novo campo de data e hora ...

EDITAR:

A razão pela qual eu pergunto é: eu tenho essa definição especial, DATETIME, e de alguma forma eu achei que isso me dá alguma segurança e outras vantagens ao lidar com datas. Agora parece que é simplesmente um VARCHAR especializado, por assim dizer.

Obrigado por suas respostas, parece que este é realmente o comportamento pretendido. 

37
marimba

De acordo com a documentação do MySQL, você deve ser capaz de incluir apenas essa string de data e hora entre aspas simples ('AAAA-MM-DD HH: MM: SS') e isso deve funcionar. Veja aqui: Literais de data e hora

Então, no seu caso, o comando deve ser o seguinte:

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

Experimentar 

    UPDATE products SET former_date=20111218131717 WHERE id=1

Alternativamente, você pode querer usar o STR_TO_DATE (veja a função STR_TO_DATE (str, format) ).

8
Atonewell

para MYSQL tente isto

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

verificação- 

selecione * da tabela1
output- datetime = 2014-12-01 00:00:00

8
GKV

Se você não precisa do valor DATETIME no resto do seu código, seria mais eficiente, simples e seguro usar uma consulta UPDATE com uma sub-seleção, algo como

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

ou no caso de estar na mesma linha em uma única mesa, apenas

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