本文讲述在MSSQL中实现类似于Split方法的自定义函数,这个函数的功能就是把一个字符串(按照特定的分隔符连接起来形成的字符串),按照指定的分隔符分割形成N个记录并插入一个临时表,并返回临时表的结果集。
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ================================================ -- 使用方法(注意将全角单引号替换为半角): -- Select * From [SplitTable](’www.hxw.red|it.hxw.red|sc.hxw.red’,’|’) -- 返回 -- tid | value -- 1 | www.hxw.red -- 2 | it.hxw.red -- 3 | sc.hxw.red -- ============================================= -- Author: <hxw.red Pioneer> -- Create date: <2021-11-16> -- Description: <实现类似于开发语句中的Split方法,返回临时表的结果集> -- ============================================= ALTER FUNCTION [dbo].[SplitTable] ( -- Add the parameters for the function here @SplitStr varchar(max), @Separator varchar(20)=’ ’ ) RETURNS @SplitStrsTable TABLE ( [tid] int identity(1,1), [value] varchar(max) ) AS BEGIN DECLARE @CIndex int; DECLARE @NextIndex int; DECLARE @ReturnText varchar(max); SELECT @CIndex=1; WHILE(@CIndex<=len(@SplitStr)) BEGIN -- CharIndex函数返回字符或者字符串在另一个字符串中的起始位置 SELECT @NextIndex=charindex(@Separator,@SplitStr,@CIndex); IF(@NextIndex=0 OR @NextIndex IS NULL) SELECT @NextIndex=len(@SplitStr)+1; SELECT @ReturnText=substring(@SplitStr,@CIndex,@NextIndex-@CIndex); INSERT INTO @SplitStrsTable([value]) VALUES(@ReturnText); SELECT @CIndex=@NextIndex+1; END RETURN; END
本函数在好学IT学院网站测试可用,测试返回结果如下图: