2016-06-29 2 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 서버 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