1.拆分函数。
用来从字符串中拆分出第几个字符串,直接上代码:
/****** 从字符串中按照分隔符拆分出字符串,以“,”为例 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION [dbo].[s_SplitSTR]
(
@s varchar(8000) , --输入字符串
@c int --需要拆分出来的位置
)
RETURNS varchar (8000) --返回结果
AS
BEGIN
DECLARE @s1 varchar(8000) --拆分出的结果
DECLARE @c1 int --分隔符位置
set @c1=0
--------以下通过循环查找分隔符到需要拆分的位置,并返回拆分的字符串---------
while @c1<>@c
begin
set @s1=substring(@s,0,CHARINDEX(',', @s))
if @s1 ='' --若当前字符串 不包含“,”,如果当期位置是要查找位置,返回字符串,否则返回空
begin
if @c1+1=@c
return @s
else
return ''
end
set @s=substring(@s,CHARINDEX(',', @s)+1,len(@s)-CHARINDEX(',', @s)) --取剩余字符串
set @c1=@c1+1
end
return @s1
END
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION [dbo].[s_SplitSTR]
(
@s varchar(8000) , --输入字符串
@c int --需要拆分出来的位置
)
RETURNS varchar (8000) --返回结果
AS
BEGIN
DECLARE @s1 varchar(8000) --拆分出的结果
DECLARE @c1 int --分隔符位置
set @c1=0
--------以下通过循环查找分隔符到需要拆分的位置,并返回拆分的字符串---------
while @c1<>@c
begin
set @s1=substring(@s,0,CHARINDEX(',', @s))
if @s1 ='' --若当前字符串 不包含“,”,如果当期位置是要查找位置,返回字符串,否则返回空
begin
if @c1+1=@c
return @s
else
return ''
end
set @s=substring(@s,CHARINDEX(',', @s)+1,len(@s)-CHARINDEX(',', @s)) --取剩余字符串
set @c1=@c1+1
end
return @s1
END
2.测试一下:
select 'a,b,c' as col1 into #t
insert #t(col1) values('e,f')
insert #t(col1) values('g')
select dbo.s_SplitSTR(col1,1) , dbo.s_SplitSTR(col1,2) , dbo.s_SplitSTR(col1,3) from #t
drop table #t
insert #t(col1) values('e,f')
insert #t(col1) values('g')
select dbo.s_SplitSTR(col1,1) , dbo.s_SplitSTR(col1,2) , dbo.s_SplitSTR(col1,3) from #t
drop table #t