2015-04-24 55 views
-3

我有几个需要导入到MySQL的文本文件,但它们没有任何分隔符,文本文件中的3行代表一个记录。
当我尝试导入它时,一切都进入一列。请看下面的例子如何导入不带分隔符的文本文件,其中包含代表案例的两行

00003461020000001ACH1        00000000 00000000000 00000000                       000000005011025708084                                      0                                00                                00          000000000000000000000                                       00000000241523551MA00               
+0

请更好地解释你的例子,以及你想获得什么。 您说3行文本代表一条记录,但在您的示例中没有看到3行。 – fferri

+0

请发布以下详细信息:示例文件,您想要在db中获得的记录,并且请将它们格式化为'code'。 – Cristik

+0

嗨,大家好,欢迎您随时链接样本文件 https://cl01.za.dc.cloudology.co.za/f/ee5754ee85/ – YoungCeaser

回答

0

你需要一个辅助表第一。

CREATE TABLE tmpHelperTable(
your_data varchar(255), 
a int, 
b int 
); 

然后,您在加载数据时需要两个user defined variables

SET @va = 0; 
SET @vb = 0; 

LOAD DATA INFILE 'your_data_file.csv' 
INTO tmpHelperTable 
LINES TERMINATED BY '\n' 
(your_data, a, b) 
SET a = @va := IF(@va = 3, 1, @va + 1), 
b = IF(@va % 3 = 0, @vb := @vb + 1, @vb); 

此行

SET a = @va := IF(@va = 3, 1, @va + 1), 

仅仅是一个递增的值,即当其到达3(或任何许多线确定一个情况)复位。
线

b = IF(@va = 1, @vb := @vb + 1, @vb); 

每上一个变量得到复位时间只是增加它的价值。我们需要这个,所以我们可以group by它。然后你有这样一个表:

your_data | a | b 
xxxxxx  1  1 
yyyyyy  2  1 
zzzzzz  3  1 
aaaaaa  1  2 
bbbbbb  2  2 
cccccc  3  2 
dddddd  1  3 
... 

然后,你所要做的就是将表转换到你的决赛桌。

CREATE TABLE final_table(
id int, 
data_1 varchar(255), 
data_2 varchar(255), 
data_3 varchar(255) 
); 

INSERT INTO final_table 
SELECT 
b, 
MAX(IF(a = 1, your_data, NULL)), 
MAX(IF(a = 2, your_data, NULL)), 
MAX(IF(a = 3, your_data, NULL)), 
FROM 
tmpHelperTable 
GROUP BY b; 
相关问题