将SQL文件解析为单独的列

时间:2010-09-29 12:41:47

标签: sql excel parsing

我有一个sql文件,它有很多插入语句(超过3000+)。 E.g。

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 个答案:

答案 0 :(得分:1)

正如bogeymin已经说过的那样 - 要么将数据转换为CSV(或者很容易从Excel转换)来操纵它。如果您使用的是Windows,请查看使用Notepad ++拆分最后一列。

或者......(我可能会这样做),将它插入到数据库中(即使你插入虚拟字段,而不是你最终想要使用的字段),然后使用字符串操作SQL的varient中的函数,用于生成更新语句或更多插入语句(无论您需要什么)。 Cerainly,MS-SQL Server可以使用SUBSTRING,PATINDEX等等来做到这一点......

答案 1 :(得分:1)

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

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

拆分表达式取自mysql documentation上的评论(搜索拆分)。

你也可以

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`

您还可以创建自己的功能,直接提取姓名和电子邮件。