SQL自定义函数split分隔字符串

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL自定义函数split分隔字符串

一、F_Split:分割字符串拆分为数据表

CreateFUNCTION[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=0OR@NextIndex ISNULL)

SELECT@NextIndex=len(@SplitString)+1;

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

INSERTINTO@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:获取分割后的字符数组的长度

Createfunction[dbo].[F_SplitLength]

(

@String nvarchar(max), --要分割的字符串

@Split nvarchar(10) --分隔符号

)

returnsint

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:获取分割后特定索引的字符串

Createfunction[dbo].[F_SplitOfIndex]

(

@String nvarchar(max), --要分割的字符串

@split nvarchar(10), --分隔符号

@index int--取第几个元素

)

returnsnvarchar(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<>0and@index>@next

begin

set@start=@location+@seed

set@location=charindex(@split,@String,@start)

set@next=@next+1

end

if@location=0select@location=len(@String)+1

return substring(@String,@start,@location-@start)

end

相关文档
最新文档