2016-06-29 58 views
1

我有臺這樣的T-SQL,列拆分字符串,並插入到表

Name | Email    | Phone number 
alis  [email protected]  +989355555;+989366666;+9803777777 
John  [email protected]  +989122222 
sara  [email protected]  +989113212;+989113312 

,我想查詢中選擇這樣的這個表,之後插入此表中的其他表。

Name | Email    | Phone number 
alis  [email protected]  +989355555 
alis  [email protected]  +989366666 
alis  [email protected]  +9803777777 
John  [email protected]  +989122222 
sara  [email protected]  +989113212 
sara  [email protected]  +989113312 

拆分所有電話號碼並用類似的字段名稱保存它們。

+1

的SQL Server 2016推出了內置字符串分割功能。如果您正在使用較低版本(以及我們大多數人),請閱讀Aaron Bertrand關於[字符串分割函數]的文章(http://sqlperformance.com/2012/07/t-sql-queries/split-strings) –

回答

2

你可以試試這個(只使用T-SQL):

DECLARE @DataSource TABLE 
(
    [Name] VARCHAR(12) 
    ,[Email] VARCHAR(12) 
    ,[PhoneNumber] VARCHAR(1024) 
); 

INSERT INTO @DataSource ([Name], [Email], [PhoneNumber]) 
VALUES ('alis', '[email protected]', '+989355555;+989366666;+9803777777') 
     ,('John', '[email protected]', '+989122222') 
     ,('sara', '[email protected]', '+989113212;+989113312'); 

SELECT DS1.[Name] 
     ,DS1.[Email] 
     ,DS3.[value] 
FROM @DataSource DS1 
CROSS APPLY 
(
    SELECT CAST(('<X>'+REPLACE(DS1.[PhoneNumber] ,';' ,'</X><X>')+'</X>') AS XML) 
) DS2 ([Col]) 
CROSS APPLY 
(
    SELECT T.C.value('.', 'varchar(32)') as value 
    FROM DS2.Col.nodes('X') as T(C) 
) DS3 ([value]); 

enter image description here