sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2012 の STRING_SPLIT

    他のアプローチは XML を使いすぎています CROSS APPLY を使用したメソッド カンマ区切りデータを分割するには:

    SELECT Split.a.value('.', 'NVARCHAR(MAX)') DATA
    FROM
    (
        SELECT CAST('<X>'+REPLACE(@ID, ',', '</X><X>')+'</X>' AS XML) AS String
    ) AS A
    CROSS APPLY String.nodes('/X') AS Split(a);
    

    結果:

    DATA
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    

    例:

    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)
    ); 
    --insert into @StudentsMark 
    ;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;
    


    1. MySQLでデータベースリンクを作成してOracleに接続するにはどうすればよいですか?

    2. SQLを使用して各グループから最大スコアプレーヤーを取得するにはどうすればよいですか?

    3. 文字列の長さを確認してから、Sql Server で部分文字列を選択する方法

    4. PL / SQL:明示カーソルを参照カーソルに変換しますか?