Разобрать файл SQL на отдельные столбцы - PullRequest
1 голос
/ 29 сентября 2010

У меня есть файл sql, в котором много операторов вставки (более 3000+).Например,

insert into `pubs_for_client` (`ID`, `num`, `pub_name`, `pub_address`, `publ_tele`, `publ_fax`, `pub_email`, `publ_website`, `pub_vat`, `publ_last_year`, `titles_on_backlist`, `Personnel`) values('7','5','4TH xxxx xxxx','xxxx xxxx, 16 xxxxx xxxxx, xxxxxxx, We','111111111','1111111111','support@example.net','www.example.net','15 675 4238 14',NULL,NULL,'Jane Bloggs(Sales Contact:)jane.bloggs@example.net,Joe Bloggs(Other Contact:)joe.bloggs@example.net');

Я экспортировал это в документ Excel (я сделал это, запустив запрос в phpmyadmin и экспортировав документ Excel).Есть только одна проблема, как вы можете видеть в этом случае, есть два имени и адреса электронной почты, которые вставляются в «Персонал».

Насколько легко / сложно было бы разделить их, чтобы они отображались как Имя, электронная почта, Имя2, электронная почта2?

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

А как насчет трех электронных писем / имен?С указанными данными это должно быть легко сделать

select replace(substring(substring_index(`Personnel`, ',', 1),length(substring_index(`Personnel`, ',', 1 - 1)) + 1), ',', '') personnel1,
       replace(substring(substring_index(`Personnel`, ',', 2),length(substring_index(`Personnel`, ',', 2 - 1)) + 1), ',', '') personnel2,
from `pubs_for_client`

Выше разделит столбец Персонал на разделитель ,.
Затем вы можете разделить эти поля на разделитель ( и ) дляразделить персонал на имя, должность и адрес электронной почты

SQL будет некрасивым (потому что mysql не имеет функции split), но он выполнит свою работу.

Было взято выражение splitиз комментариев mysql документация (поиск по сплит).

Вы также можете

CREATE FUNCTION strSplit(x varchar(255), delim varchar(12), pos int) returns varchar(255)
return replace(substring(substring_index(x, delim, pos), length(substring_index(x, delim, pos - 1)) + 1), delim, '');

После чего вы можете

select strSplit(`Personnel`, ',', 1), strSplit(`Personnel`, ',', 2)
from `pubs_for_client`

Youможет также создать вашу собственную функцию, которая будет извлекать непосредственно имена и электронные письма.

1 голос
/ 29 сентября 2010

Как уже сказал богеймин - либо получите данные в CSV (или легко конвертируйте их из Excel), чтобы манипулировать ими.Если вы работаете в Windows, обратите внимание на использование Notepad ++ для разделения последнего столбца.

Или ... (и я, вероятно, сделаю это), вставьте его в базу данных как есть (даже если вы вставляете в фиктивное поле, а не в то, которое вы в конечном итоге захотите использовать), используйте функции манипуляции со строками в вашем SQL-коде для создания операторов обновления или дополнительных операторов вставки (все, что вам нужно).Конечно, MS-SQL Server может сделать это, используя такие вещи, как SUBSTRING, PATINDEX и т. Д. И т. Д. *

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