2017-02-28 122 views
0

我有这个文件,CSV:如何字符串转换为日期时间格式的Mysql

20170117-00:00:6 3087A6B282A46C 124.191.134.139 2746 256 63628 
20170117-00:00:53 330391C9F58B5A 120.18.97.172 2746 257 43077 
20170117-00:02:27 3303CD14BD40C8 110.147.131.78 2746 256 63628 
20170117-00:02:00 3304B3CD448E4F 189.35.218.62 2746 255 43074 

,我试图使用LOAD DATA LOCAL INFILE上传,但我得到的时间列只Null值。在这里有我的代码(时间是表列名)

LOAD DATA LOCAL INFILE 'path.log' 
       INTO TABLE Clicks 
       CHARACTER SET latin1 
       FIELDS TERMINATED BY '\t' 

       ENCLOSED BY '"' 
       LINES TERMINATED BY '\n' 
       IGNORE 1 ROWS 

       SET Time= STR_TO_DATE(@Time,'%Y%m%d-%H:%i:%s') 
       ; 
+0

'20170117-00:00:6' ...是'6'一个错字后失踪的数字吗? –

+0

我猜'IGNORE 1 ROWS'是忽视'6',它可能不是一个错字 –

+0

是的它是一个错字(20170117-00:00:16)。我省略了第一行。在文件中有与列名相关的行。 – Valerio

回答

0

这是你应该使用的语法:

LOAD DATA LOCAL INFILE 'path.log' 
INTO TABLE Clicks 
CHARACTER SET latin1 
FIELDS TERMINATED BY '\t' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS 
(@Time, column2, column3, column4, column5)   -- read time data into @Time 
SET column1 = STR_TO_DATE(@Time, '%Y%m%d-%H:%i:%s') -- then set column1 

我觉得@Time变量从未被设置成任何东西每条记录都被读取,因此您在第一列中获得了NULL

+0

谢谢..它的工作原理! – Valerio

0

尝试这个

LOAD DATA LOCAL INFILE 'path.log' 
       INTO TABLE Clicks 
       CHARACTER SET latin1 
       FIELDS TERMINATED BY '\t' 

       ENCLOSED BY '"' 
       LINES TERMINATED BY '\n' 
       IGNORE 1 ROWS 

       SET TIME= CONCAT(SUBSTRING(@Time,1,4),'-',SUBSTRING(@Time,5,2),'-',SUBSTRING(@Time,7,2),' ',REPLACE(@Time,CONCAT(SUBSTRING_INDEX(@Time, '-',1),'-'),'')) 
相关问题