首页 >数据库 >mysql教程 >如何将 SQL 列中的分隔值拆分为多行?

如何将 SQL 列中的分隔值拆分为多行?

Barbara Streisand
Barbara Streisand原创
2025-01-04 11:43:35730浏览

How Can I Split Delimited Values in a SQL Column into Multiple Rows?

将 SQL 列中的分隔值拆分为多行

尝试将值拆分为多个行时,SQL 列中的分隔符可能会带来挑战行。本文提供了针对最新版本和旧版 SQL Server 的解决方案。

SQL Server 2016 和较新版本

SQL Server 2016 引入了 STRING_SPLIT 函数,可以轻松实现使用以下方法进行值分离语法:

SELECT s.[message-id], f.value
FROM dbo.SourceData AS s
CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;

2016 年之前的 SQL Server 版本

对于旧版本的 SQL Server,创建一个拆分函数,例如:

CREATE FUNCTION dbo.SplitStrings
(
    @List       NVARCHAR(MAX),
    @Delimiter  NVARCHAR(255)
)
RETURNS TABLE
AS
    RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number),
        Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number, 
        CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number)))
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id])
        FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number)
    WHERE Number <= CONVERT(INT, LEN(@List))
        AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter
    ) AS y);
GO

创建 split 函数后,您可以使用它来提取值:

SELECT s.[message-id], f.Item
FROM dbo.SourceData AS s
CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;

提示:

为了实现最佳存储和引用,请避免在列名称中使用破折号,因为它们需要用方括号括起来。

以上是如何将 SQL 列中的分隔值拆分为多行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn