SQL表数据拆分

时间:2015-11-17 13:52:44

标签: sql sql-server outlook

我们使用自动功能将Outlook邮件帐户中的电子邮件发送到SQL Server 2014数据库中的表。

表格布局:

Column_name Type
Mail_Id uniqueidentifier
Mail_Sender nvarchar
Mail_Sent   datetime
Mail_Received   datetime
Mail_Subject    nvarchar
Mail_Body   nvarchar

我希望将Mail_body行中的数据拆分到下表并将其拆分为正确的列(参见下文)

Column_name Type
Client_ID   uniqueidentifier
Client_Name nvarchar
Client_Surname  nvarchar
Email_Address   nvarchar
Phone_Number    nvarchar
DOB nvarchar
Smoker  nvarchar
AOCR    nvarchar
Term    nvarchar
BTTC    nvarchar
Credit_User nvarchar
Insurance_Type  nvarchar
Premium nvarchar
Paid_Commission money

Mail_body文本字符串=

的示例
Sent from my iPhone

Begin forwarded message:


    Product: Life & Critical Illness
    Name: XXXXXX
    Email Address: XXXXXXXX@yahoo.com <mailto:XXXXXXXX@yahoo.com> 
    Phone: 07XXXXXXXX
    Date of Birth: XX/XX/XXXX
    Smoker: Yes
    Amount of cover required: 
    Term: 
    Best Time to Call: Now/ASAP
    Credit User: XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXX

希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

因此,如果您的数据未经过验证,则任何解决方案都会出现问题(如果Name:行为Name: Email Address:(意味着用户输入了Email Address:作为其名称)该怎么办?

假设您进行了某种检查,CHARINDEX是您可以使用的功能。

INSERT INTO NewTable 
(FIELDS)
 SELECT 
 ...
 SUBSTRING(Mail_Body,CHARINDEX('Product:', Mail_Body,0),CHARINDEX('Name:', Mail_Body,0)-1),
 ...
FROM OldTable

请注意,对于长字符串,创建存储过程可能更有效,该存储过程通过字符串跟踪先前的charindex值,因此您不必继续调用相同的函数。

https://msdn.microsoft.com/en-us/library/ms186323.aspx https://msdn.microsoft.com/en-ca/library/ms187748.aspx