2016-09-02 3 views
0

誰かが私にこれを手伝ってもらえますか?結果のテーブルはタイムスタンプの唯一のゼロを表示しています。私はdatatimeとタイムスタンプするフィールドタイプを変更しようとしたがない運ロードデータinfile mysqlの日付時刻はゼロになります

MYSQL

LOAD DATA LOCAL INFILE 'vals.csv' 
    INTO TABLE vals 
    FIELDS TERMINATED BY "," 
    LINES TERMINATED BY "\n" 
    IGNORE 1 LINES 
    (@varTimeSt,NOMINAL,NAME,ID,VAL) SET DATETIME = STR_TO_DATE(@varTimeSt,'%d/%m/%Y %h:%i:%s'); 

CSV

テーブルを結果の

DATETIME,NAME,ID,VAL 
"25/08/2016 02:00:00",tom,cNum6,12 
"25/08/2016 02:00:00",Charles,cNum7,10.58 
"25/08/2016 02:00:00",Donal,cNum8,10.18 
"25/08/2016 02:00:00",Duncan,cNum7,10.31 

ファイル

DATETIME,NAME,ID,VAL 
0000-00-00 00:00:00,tom,cNum6,12 
0000-00-00 00:00:00,Charles,cNum7,10.58 
0000-00-00 00:00:00,Donal,cNum8,10.18 
0000-00-00 00:00:00,Duncan,cNum7,10.31 
+0

は私が愚かなミスを犯し、この問題 –

+0

を固定し、日付が "" 表ヴァルスBY TERMINATED フィールドにLOAD DATA LOCAL INFILE 'vals.csv' に囲まれています\ n "" \ n "で終了しました IGNORE 1 LINES (@ varTimeSt ,, NAME、ID、VAL)SET DATETIME = STR_TO_DATE(@varTimeSt、 '%d /%m /%Y%h: %i:%s '); –

答えて

1

あなたの問題は、あなたの日付があるということですネイティブmysql DATETIMEフォーマット(%Y-%m-%d %H:%i:%s)ではなく、これはb以下のような示すE:

mysql> SELECT CAST('25/08/2016 02:00:00' AS DATETIME); 
+-----------------------------------------+ 
| CAST('25/08/2016 02:00:00' AS DATETIME) | 
+-----------------------------------------+ 
| NULL         | 
+-----------------------------------------+ 
1 row in set, 1 warning (0,00 sec) 

mysql> SHOW WARNINGS; 
+---------+------+-------------------------------------------------+ 
| Level | Code | Message           | 
+---------+------+-------------------------------------------------+ 
| Warning | 1292 | Incorrect datetime value: '25/08/2016 02:00:00' | 
+---------+------+-------------------------------------------------+ 
1 row in set (0,00 sec) 

ソリューションは、これは、ディスク上またはソースであなたのDATETIME列を操作することによって行うことができ、MySQLのフォーマットにそれらを取得することです。これは私が以下で概説する「自己充足」ソリューションよりも難しいかもしれません。

データがデータベース内に入ると、この種の問題を解決するための日付(STR_TO_DATE)関数が存在します。ここでは、あなたの形式のデモンストレーションがあります。そうでない場合はhereマニュアルを参照してください。 (あなたが別の日付形式に使用できるコードとテーブルのDATE_FORMATセクションを参照してください。):このような状況で個人的に

mysql> SELECT CAST(STR_TO_DATE('25/08/2016 02:00:00', '%d/%m/%Y %H:%i:%s') AS DATETIME); 
+---------------------------------------------------------------------------+ 
| CAST(STR_TO_DATE('25/08/2016 02:00:00', '%d/%m/%Y %H:%i:%s') AS DATETIME) | 
+---------------------------------------------------------------------------+ 
| 2016-08-25 02:00:00              | 
+---------------------------------------------------------------------------+ 
1 row in set (0,00 sec) 

私は文字列として日付フィールドを受け入れ、一時テーブルにデータをロードしたいですSTR_TO_DATE関数を使用してINSERT関数を使用して、最終テーブルにデータを取得します。最終溶液(のみテストされていない、ガイドライン)は次のようになります。

CREATE TEMPORARY TABLE valsLoad (DATETIME TEXT,NAME TEXT,ID TEXT,VAL INT); 

LOAD DATA LOCAL INFILE 'vals.csv' 
INTO TABLE valsLoad 
FIELDS TERMINATED BY "," 
LINES TERMINATED BY "\n" 
IGNORE 1 LINES 
(@varTimeSt,NOMINAL,NAME,ID,VAL) SET DATETIME = STR_TO_DATE(@varTimeSt,'%d/%m/%Y %h:%i:%s'); 

INSERT INTO vals 
SELECT STR_TO_DATE(DATETIME, '%d/%m/%Y %H:%i:%m'), NAME, ID, VAL FROM valsLoad; 

DROP TEMPORARY TABLE valsLoad; 

ご質問があれば私に知らせてください。

よろしく、

ジェームズ

+0

Santosh - これは役に立ちましたか?他に必要なことがあれば教えてください –