Загрузка данных из .csv с применением регулярных выражений перед вставкой в ​​таблицу - PullRequest
1 голос
/ 18 марта 2011

Я знаю, что есть код для импорта данных .csv в таблицу mysql, и я использую его:

LOAD DATA INFILE "file.csv" INTO TABLE foo FIELDS TERMINATED BY "," LINES TERMINATED BY "\\r\\n";

Данные внутри этого .csv представляют собой строки, подобные этому примеру:

08/e0/Breast_Cancer_Res_2001_Nov_2_3(1)_55-60.tar.gz Breast Cancer Res. 2001 Nov 2; 3(1):55-60 PMC13900
b0/ac/Breast_Cancer_Res_2001_Nov_9_3(1)_61-65.tar.gz Breast Cancer Res. 2001 Nov 9; 3(1):61-65 PMC13901

Мне просто нужна первая часть (путь .tar.gz), всегда на шаблоне

(letter or number)(letter or number) / (letter or number)(letter or number)/...

и часть, начинающаяся с 'PMC', всегда на шаблоне

PMC(number...)

где «число» означает число от 0 до 9, а буква означает букву от a до z (как в верхнем, так и в нижнем регистре)

Итак, применяя LOAD DATA, ирегулярное выражение и вставка записей результатов в моей таблице SQL, таблица результатов должна быть:

1      08/e0/Breast_Cancer_Res_2001_Nov_2_3(1)_55-60.tar.gz     PMC13900
2      b0/ac/Breast_Cancer_Res_2001_Nov_9_3(1)_61-65.tar.gz     PMC13901

Какой должна быть команда SQL, чтобы сделать все это?

1 Ответ

2 голосов
/ 18 марта 2011

Я сделал тест с вашими двумя строками

create table mytest(
id int not null auto_increment primary key,
descr varchar(250),
code varchar(50)
) engine = myisam;

load data infile 'E:\file.txt'
into table mytest 
fields terminated by ';'
ignore 1 lines
(@descr,@code)
set descr = substring(@descr,1,locate('tar.gz',@descr)+5),
code = substring(@code,locate('PMC',@code))

Надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...