수색…


SQL Server 2016에서 문자열 분할

마지막으로 SQL Server 2016에서 Split 문자열 함수를 도입했습니다. STRING_SPLIT

매개 변수 : 두 개의 매개 변수를 받아들입니다.

문자열 :

모든 문자 유형 (즉, nvarchar, varchar, nchar 또는 char)의 표현식입니다.

구분 기호 :

연결된 문자열의 구분 기호로 사용되는 모든 문자 유형 (예 : nvarchar (1), varchar (1), nchar (1) 또는 char (1))의 단일 문자 표현식입니다.

참고 : 식이 비어 있지 않은 문자열인지 항상 확인해야합니다.

예:

Select Value
From STRING_SPLIT('a|b|c','|')

위의 예에서

String    : 'a|b|c'
separator : '|'

결과 :

+-----+
|Value|
+-----+
|a    |
+-----+
|b    |
+-----+
|c    |
+-----+

빈 문자열 인 경우 :

SELECT value
FROM STRING_SPLIT('',',')

결과 :

  +-----+
  |Value|
  +-----+
1 |     |
  +-----+

WHERE 절을 추가하면 위의 상황을 피할 수 있습니다.

SELECT value
FROM STRING_SPLIT('',',')
WHERE LTRIM(RTRIM(value))<>''

XML을 사용하여 SQL Server 2008/2012/2014에서 문자열 분할

STRING_SPLIT 함수가 없으므로 XML 해킹을 사용하여 문자열을 행으로 분할해야합니다.

예:

SELECT split.a.value('.', 'VARCHAR(100)') AS Value 
FROM   (SELECT Cast ('<M>' + Replace('A|B|C', '|', '</M><M>')+ '</M>' AS XML) AS Data) AS A 
       CROSS apply data.nodes ('/M') AS Split(a); 

결과:

+-----+
|Value|
+-----+
|A    |
+-----+
|B    |
+-----+
|C    |
+-----+

T-SQL 테이블 변수 및 XML

Declare @userList Table(UserKey VARCHAR(60))
Insert into @userList values ('bill'),('jcom'),('others')
--Declared a table variable and insert 3 records

Declare @text XML
Select  @text = (
        select UserKey  from @userList for XML Path('user'), root('group')
) 
--Set the XML value from Table 

Select @text

--View the variable value
XML: \<group>\<user>\<UserKey>bill\</UserKey>\</user>\<user>\<UserKey>jcom\</UserKey>\</user>\<user>\<UserKey>others\</UserKey>\</user>\</group>


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow