2016-09-02 32 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

我犯了一個愚蠢的錯誤,日期將被封閉LOAD DATA LOCAL INFILE 'vals.csv' INTO TABLE瓦爾斯 FIELDS TERMINATED BY 「」 ''' 「\ 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) 

解決的辦法是讓他們到MySQL格式,這可以通過在磁盤上或在源操縱你的DATETIME柱來完成。這可能比我將在下面概述的'自給自足'解決方案更困難。

一旦數據在數據庫裏面就存在字符串日期(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) 

個人在這種情況下,我想將數據加載到所接受的日期字段作爲一個字符串臨時表然後使用INSERTSTR_TO_DATE函數將數據獲取到最終表中。 (僅未經測試,準則)的最終解決辦法是這樣的:

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 - 對您有幫助嗎? –

相關問題