首页 > 数据库 > mysql教程 > 如何在 SQL Server 2012 中拆分逗号分隔的字符串?

如何在 SQL Server 2012 中拆分逗号分隔的字符串?

Mary-Kate Olsen
发布: 2025-01-11 07:58:43
原创
585 人浏览过

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 中拆分逗号分隔的值,请考虑使用以下基于 XML 的方法和 CROSS APPLY:

<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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板