web-dev-qa-db-ja.com

MySQL:日時を他の日時フィールドに挿入します

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

OK、引用符で囲まれていない文字列を入れるのは間違っていると理解していますが、DATETIMEはそもそも単なる文字列ですか?何をdo入れますか?私が望むのは、既存の値を新しい日時フィールドに確実に転送することです...

編集:

私が尋ねる理由は、この特別な定義であるDATETIMEがあり、何らかの理由で、日付を処理するときにセキュリティやその他の利点が得られると思ったからです。今では、いわば単に特殊なVARCHARのようです。

ご回答いただきありがとうございます、これは実際に意図された動作であるようです。

39
marimba

MySQLのドキュメントによると、その日付/時刻文字列を単一引用符( 'YYYY-MM-DD HH:MM:SS')で囲むだけで機能するはずです。ここを見てください: 日付と時刻のリテラル

したがって、あなたの場合、コマンドは次のようになります。

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

試して

    UPDATE products SET former_date=20111218131717 WHERE id=1

または、STR_TO_DATE( STR_TO_DATE(str、format) を参照)関数の使用を検討することもできます。

8
Atonewell

mYSQLの場合はこれを試してください

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

検証-

table1から*を選択
output- datetime = 2014-12-01 00:00:00

8
GKV

コードの残りの部分でDATETIME値が必要ない場合は、サブセレクトでUPDATEクエリを使用する方が効率的で、シンプルで安全です。

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

または、単一のテーブルの同じ行にある場合は、

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