发布网友 发布时间:2022-04-25 20:35
共2个回答
懂视网 时间:2022-04-29 23:29
Create FUNCTION [dbo].[F_Split] ( @SplitString nvarchar(max), --源字符串 @Separator nvarchar(10)=‘ ‘ --分隔符号,默认为空格 ) RETURNS @SplitStringsTable TABLE --输出的数据表
( [id] int identity(1,1), [value] nvarchar(max) ) AS BEGIN DECLARE @CurrentIndex int; DECLARE @NextIndex int; DECLARE @ReturnText nvarchar(max); SELECT @CurrentIndex=1; WHILE(@CurrentIndex<=len(@SplitString)) 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 RETURN; END --使用示例 select * FROm dbo.F_Split(‘111,b2222,323232,32d,e,323232f,g3222‘, ‘,‘)
结果为
id value
-------- ---------------------------------------
1 111
2 b2222
3 323232
4 32d
5 e
6 323232f
7 g3222
=========================================================================
二、F_SplitLength:获取分割后的字符数组的长度
Create function [dbo].[F_SplitLength] ( @String nvarchar(max), --要分割的字符串 @Split nvarchar(10) --分隔符号 ) returns int as begin declare @location int declare @start int declare @length int set @String=ltrim(rtrim(@String)) set @location=charindex(@split,@String) set @length=1 while @location<>0 begin set @start=@location+1 set @location=charindex(@split,@String,@start) set @length=@length+1 end return @length end --调用示例 select dbo.F_SplitLength(‘111,b2222,323232,32d,e,323232f,g3222‘,‘,‘)
结果为7。
=========================================================================
三、F_SplitOfIndex:获取分割后特定索引的字符串
Create function [dbo].[F_SplitOfIndex] ( @String nvarchar(max), --要分割的字符串 @split nvarchar(10), --分隔符号 @index int --取第几个元素 ) returns nvarchar(1024) as begin declare @location int declare @start int declare @next int declare @seed int set @String=ltrim(rtrim(@String)) set @start=1 set @next=1 set @seed=len(@split) set @location=charindex(@split,@String) while @location<>0 and @index>@next begin set @start=@location+@seed set @location=charindex(@split,@String,@start) set @next=@next+1 end if @location =0 select @location =len(@String)+1 return substring(@String,@start,@location-@start) end --使用示例 select dbo.F_SplitOfIndex(‘111,b2222,323232,32d,e,323232f,g3222‘,‘,‘, 3)
SQL自定义函数split分隔字符串
标签:
热心网友 时间:2022-04-29 20:37
目前的sql没有自带split的函数,所以如果想用的话,需要自己先自建一个split的内嵌函数后,再使用;
这个函数最简单的用法,就是通过某个特定的分隔符,将一串字符串分割开来;
例如:split('a/b/c/d/e','/'),就会变成:
a
b
c
d
e
这个意思就是说,用'\'作为分隔符,分割'a/b/c/d/e'这个字符串;
具体如何构建split函数,可以参考一下这个:网页链接
当然还可以根据自己的需要,构建更复杂的函数,方便自己的使用;