自定义拆分电子邮件列名称到SQL中的多个列

时间:2017-07-20 20:48:04

标签: sql sql-server tsql sql-server-2008 split

我有一个电子邮件列,每行有3-4封电子邮件,我希望每列分成一封电子邮件:

当前列如下所示:

     Email_column
1. drone@gmail.com bob@yahoo.com drake@gmail.com

预期输出应为:

    Email_1               Email_2         Email_3
1.  drone@email.com    bob@yahoo.com      drake@gmail.com 

1 个答案:

答案 0 :(得分:3)

使用CROSS APPLY和一点XML

示例

Declare @YourTable table (ID int,Email_column varchar(max))
Insert Into @YourTable values
(1,'drone@gmail.com bob@yahoo.com drake@gmail.com')

Select A.ID
      ,B.*
 From  @YourTable A
 Cross Apply (
                 Select Pos1 = n.value('/x[1]','varchar(max)')
                       ,Pos2 = n.value('/x[2]','varchar(max)')
                       ,Pos3 = n.value('/x[3]','varchar(max)')
                       ,Pos4 = n.value('/x[4]','varchar(max)')
                  From  (Select Cast('<x>' + replace(A.Email_column,' ','</x><x>')+'</x>' as xml) as n) X
             ) B

<强>返回

ID  Pos1            Pos2            Pos3              Pos4
1   drone@gmail.com bob@yahoo.com   drake@gmail.com   NULL