我需要将几个文本文件导入MySQL,但它们没有任何分隔符,文本文件中的3行代表一条记录。
当我尝试导入它时,一切都进入一列。请参阅下面的示例
00003461020000001ACH1 00000000 00000000000 00000000 000000005011025708084 0 00 00 000000000000000000000 00000000241523551MA00
答案 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;