SQL Server实现Split函数将字符串分隔转换成数据表

需求

C#语言中有内置的字符串函数Split()可以轻松实现分隔将类似 1,2,3,4 的字符串变成数组,然后进行处理,但是SQL Server默认没有这种内置的支持。

实现

需要通过自定义函数来实现,思路就是创建表值函数,返回一个分隔后的数据表,然后查询这个返回的表即可。

代码如下

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER FUNCTION [dbo].[SplitToTable_Func]

  (

      @SplitString varchar(max),

      @Separator nvarchar(10)=' '

  )

 RETURNS @SplitStringsTable TABLE

 (

  [id] int identity(1,1),

  [value] varchar(max)

 )

 AS

 BEGIN

    IF @SplitString<>''

    BEGIN

     DECLARE @CurrentIndex int

     DECLARE @NextIndex int

     DECLARE @ReturnText varchar(max)

     SELECT @CurrentIndex=1

     WHILE(@CurrentIndex<=len(@SplitString)+1)

         BEGIN

             SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex)

             IF(@NextIndex=0 OR @NextIndex IS NULL)

                 SELECT @NextIndex=len(@SplitString)+1

                 SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex)

                 INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText)

                 SELECT @CurrentIndex=@NextIndex+1

             END

    END

    RETURN

 END

调用方法

SELECT * FROM dbo.SplitToTable_Func('1,2,3,4',',')

效果

 

本文来自笔者博客,原文地址:SQL Server实现Split函数将字符串分隔转换成数据表

你可能感兴趣的:(SQL Server)