parsingSQL文件以分隔列

我有一个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是多么容易/困难?

什么时候有三封电子邮件/名字? 显示的数据应该很容易做到

 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没有分割function),但是它会完成工作。

拆分expression式取自mysql文档的注释(search拆分)。

你也可以

 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` 

你也可以创build自己的函数,直接提取姓名和电子邮件。

正如bogeymin已经说过的 – 要么将数据转换为CSV(或者从Excel中轻松转换)来操纵它。 如果你在Windows上,那么看看使用记事本++来拆分最后一列。

或者…(我可能会这样做),把它插入数据库(即使你插入一个虚拟的字段,而不是你最终要使用的),然后在你的string操作函数用来创build更新语句的SQLvariables,或者更多的插入语句(无论你需要什么)。 毫无疑问,MS-SQL Server可以使用诸如SUBSTRING,PATINDEX等之类的东西来实现这个function。