好学IT学院:IT信息技术分享交流平台
学段:职业初期  学科:计算机科学与技术  来源:it.hxw.red  作者:好学IT学院  发布时间:2021-11-16  ★★★★★加入收藏〗〖手机版
摘要:本文讲述在MSSQL中实现类似于Split方法的自定义函数,这个函数的功能就是把一个字符串(按照特定的分隔符连接起来形成的字符串),按照指定的分隔符分割形成N个记录并插入一个临时表。…

本文讲述在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学院网站测试可用,测试返回结果如下图: