>데이터 베이스 >MySQL 튜토리얼 >SQL Server 2012에서 쉼표로 구분된 문자열을 분할하는 방법은 무엇입니까?

SQL Server 2012에서 쉼표로 구분된 문자열을 분할하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-11 07:58:43642검색

How to Split Comma-Separated Strings in 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.