599CN.COM - 【源码之家】老牌网站源码下载站,提供完整商业网站源码下载!

sql server按逗号拆分列为多行

源码网2023-07-14 18:12:27280SQL Server函数SQLServer

简单易用的技巧来解决逗号拆分的问题

***

1. 介绍

在开发SQL Server数据库应用程序中,有时候我们需要将一个包含多个值的字符串,通过逗号进行拆分并存储为多行数据。本文将介绍如何使用SQL Server内置函数和技巧来实现这个目的。

***

2. 使用内置函数STRING_SPLIT

字符串列拆分最简单的方法是使用SQL Server 2016及以上版本的内置函数STRING_SPLIT。这个函数可以把一个字符串按照指定的分隔符进行拆分,并返回一个包含拆分后值的表。

SELECT value FROM STRING_SPLIT('apple,banana,orange', ',')

这个查询将返回:

value

------

apple

banana

orange

***

3. 自定义函数实现拆分

如果你使用的是较早版本的SQL Server,没有STRING_SPLIT函数可用,你可以自己创建一个自定义函数来完成拆分操作。下面是一个使用递归技术实现的自定义函数:

CREATE FUNCTION dbo.SplitString (@String VARCHAR(MAX), @Delimiter CHAR(1))

RETURNS @Result TABLE (Value VARCHAR(MAX))

AS

BEGIN

DECLARE @Pos INT

SET @String = @String + @Delimiter

SET @Pos = CHARINDEX(@Delimiter, @String)

WHILE @Pos > 0

BEGIN

INSERT INTO @Result (Value)

VALUES (SUBSTRING(@String, 1, @Pos-1))

SET @String = SUBSTRING(@String, @Pos+1, LEN(@String)-@Pos)

SET @Pos = CHARINDEX(@Delimiter, @String)

END

RETURN @Result

***

4. 使用XML方式拆分

还有一种常用的方法是使用XML方式进行拆分。下面是一个使用XML的例子:

DECLARE @String VARCHAR(MAX)

SET @String = 'apple,banana,orange'

SELECT value FROM

(SELECT CAST(''+REPLACE(@String, ',', '')+'' AS XML) AS String) AS T

CROSS APPLY T.String.nodes('x') AS Split(a)

这个查询将返回:

value

------

apple

banana

orange

***

5. 总结

无论你使用哪种方法,拆分字符串列为多行数据是SQL Server中常见的需求。使用内置函数STRING_SPLIT是最简单的方法,但仅适用于SQL Server 2016及以上版本。如果你使用的是较早版本的SQL Server,可以自定义函数或者使用XML方式来实现拆分。希望本文介绍的方法能帮助你解决这个问题。

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:https://599cn.com/post/11429.html