2015-04-24 4 views
-3

У меня есть несколько текстовых файлов, которые мне нужно импортировать в MySQL, но у них нет разделителей, а 3 строки в текстовом файле представляют одну запись ,
Когда я пытаюсь импортировать его, все идет в одну колонку. См. Пример нижеКак импортировать текстовый файл без разделителей с двумя строками, представляющими регистр

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

Пожалуйста, лучше объясните свой пример и то, что вы хотели бы получить. Вы сказали, что 3 строки текста представляют одну запись, но я не вижу 3 строки в вашем примере. – fferri

+0

Пожалуйста, разместите следующую информацию: образец файла, записи, которые вы хотите получить в db, и, пожалуйста, отформатируйте их как «код». – 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^