如何导入没有分隔符的文本文件,其中2行代表大小写

时间:2015-04-24 14:50:06

标签: mysql text-files data-import

我需要将几个文本文件导入MySQL,但它们没有任何分隔符,文本文件中的3行代表一条记录。
当我尝试导入它时,一切都进入一列。请参阅下面的示例

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

1 个答案:

答案 0 :(得分: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;