SQL自定义函数split分隔字符串
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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