我有一个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是多么容易/困难?
答案 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`
您还可以创建自己的功能,直接提取姓名和电子邮件。