2017-08-02 30 views
0

我有四列的文件:從列值中提取年份和月份值,並插入到MYSQL

local_timestamp, utc_timestamp,  pointname,  pointvalue 
7/7/2017 12:29:00 PM,7/7/2017 6:59:00 AM,STS.PresentValue,1.0 
7/7/2017 12:30:00 PM,7/7/2017 7:00:00 AM,STS.PresentValue,1.0 

我創建瞭如下表:

CREATE TABLE sample(
    `local_timestamp` DATETIME NOT NULL, 
    `utc_timestamp` DATETIME NOT NULL, 
    `pointname` VARCHAR(50) NOT NULL, 
    `pointvalue` FLOAT NOT NULL DEFAULT 0.0, 
    `year_id` INT NOT NULL, 
    `month_id` INT NOT NULL, 
    UNIQUE KEY (year_id,month_id)) 
    PARTITION BY KEY() ; 

現在,因爲該文件包含只有4個字段,但表中包含6,我想如何使用LOAD DATA INFILE將數據批量插入到表中。

year_idmonth_id字段應具有local_timestamp字段中的年份和月份值。

我想下面的東西,但它拋出一個錯誤。

LOAD DATA INFILE 'D:/data/*' 
INTO TABLE sample 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n' 
(@var1, @var2, pointname, pointvalue) 
SET local_timestamp = STR_TO_DATE(@var1, '%d/%m/%Y %h:%i:%s %p'), utc_timestamp = STR_TO_DATE(@var2, '%d/%m/%Y %h:%i:%s %p'), year_id = YEAR(@var1),month_id = MONTH(@var1); 

ERROR 1064 (42000): 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 'utc_timestamp = STR_TO_DATE(@utc_timestamp, '%d/%m/%Y %h:%i:%s %p'), pointname =' at line 6 
+0

更新默認或空或空值和上傳文件的兩個領域 –

+0

@AnkitAgrawal已經更新了問題 –

+0

我可以用別的東西插入之前轉換和生成所需數據的其餘部分,但是這將是一個添加,但在我去之前,做一些其他事情我想知道這是否可以通過SQL –

回答

0

那麼,我已經得到了工作解決方案。後退蜱使它工作。

LOAD DATA LOCAL INFILE 'D:/data/file' 
INTO TABLE sample 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n' 
(@var1, @var2, @pointname, @pointvalue) 
SET `local_timestamp` = STR_TO_DATE(@var1, '%d/%m/%Y %h:%i:%s %p'), `utc_timestamp` = STR_TO_DATE(@var2, '%d/%m/%Y %h:%i:%s %p'), `pointname` = @pointname, `pointvalue` = @pointvalue, `year_id` = SUBSTRING(@var1,5,4) ,`month_id` = SUBSTRING_INDEX(@var1,'/',1);