집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server 2012에서 쉼표로 구분된 문자열을 분할하는 방법은 무엇입니까?
SQL Server 2012에서 STRING_SPLIT 함수 대체
SQL Server 2016에 도입된 STRING_SPLIT 함수는 쉼표로 구분된 문자열을 개별 요소로 분할하는 편리한 방법을 제공합니다. 그러나 SQL Server 2012를 사용하는 경우에는 이 기능이 없기 때문에 해결 방법이 필요합니다.
대체 분할 방법
SQL Server 2012에서 쉼표로 구분된 값을 분할하려면 CROSS APPLY와 함께 다음 XML 기반 방법을 사용하는 것이 좋습니다.
<code class="language-sql">SELECT Split.a.value('.', 'NVARCHAR(MAX)') AS DATA FROM ( SELECT CAST('<X>'+REPLACE(@ID, ',', '</X><X>')+'</X>' AS XML) AS String ) AS A CROSS APPLY String.nodes('/X') AS Split(a);</code>
사용예
@ID 매개변수에 쉼표로 구분된 숫자 목록이 포함되어 있다고 가정합니다.
<code class="language-sql">@ID varchar = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20';</code>
@ID를 구성 요소 부분으로 분할하는 쿼리를 실행합니다.
<code>DATA 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20</code>
고급 예시
이 방법을 확장하여 더 복잡한 쿼리를 생성할 수 있습니다. 예를 들어 다음 쿼리는 @ID와 @Marks(쉼표로 구분된 또 다른 목록)를 @StudentsMark라는 테이블로 분할하고 각 ID를 해당 점수와 연결합니다.
<code class="language-sql">DECLARE @ID NVARCHAR(300)= '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'; DECLARE @Marks NVARCHAR(300)= '0,1,2,5,8,9,4,6,7,3,5,2,7,1,9,4,0,2,5,0'; DECLARE @StudentsMark TABLE (id NVARCHAR(300), marks NVARCHAR(300) ); ;WITH CTE AS ( SELECT Split.a.value('.', 'NVARCHAR(MAX)') id, ROW_NUMBER() OVER(ORDER BY ( SELECT NULL )) RN FROM ( SELECT CAST('<X>'+REPLACE(@ID, ',', '</X><X>')+'</X>' AS XML) AS String ) AS A CROSS APPLY String.nodes('/X') AS Split(a)), CTE1 AS ( SELECT Split.a.value('.', 'NVARCHAR(MAX)') marks, ROW_NUMBER() OVER(ORDER BY ( SELECT NULL )) RN FROM ( SELECT CAST('<X>'+REPLACE(@Marks, ',', '</X><X>')+'</X>' AS XML) AS String ) AS A CROSS APPLY String.nodes('/X') AS Split(a)) INSERT INTO @StudentsMark SELECT C.id, C1.marks FROM CTE C LEFT JOIN CTE1 C1 ON C1.RN = C.RN; SELECT * FROM @StudentsMark;</code>
위 내용은 SQL Server 2012에서 쉼표로 구분된 문자열을 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!