if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_split]') and xtype in (N'FN', N'IF', N'TF'))

drop function [dbo].[f_split]

GO

/*--得到字符串列表指定位置的字符

 

 可以自定义字符串列表的分隔符

 如果取数位置超出的范围,返回空字符串

--邹建 2004.07(引用请保留此信息)--*/

/*--调用示例

 --测试数据

 declare @t table(FITEM varchar(100))

 insert @t select '100.120.10' 

 union all select '20.140.10'

 union all select '150.124.150.10'

 

 --查询

 select fitem1=dbo.f_split(fitem,1,'.')

  ,fitem2=dbo.f_split(fitem,2,'.')

  ,fitem3=dbo.f_split(fitem,3,'.')

  ,fitem4=dbo.f_split(fitem,4,'.')

 from @t

--*/

create function f_split(

@s varchar(8000),  --字符串列表

@pos int, --取数位置

@splitchar varchar(10) --分隔符

)returns varchar(8000)

as

begin

 declare @i int,@ilen int

 select @i=charindex(@splitchar,@s),@ilen=len(@splitchar)

 while @i>0 and @pos>1

  select @s=substring(@s,@i+@ilen,8000)

   ,@i=charindex(@splitchar,@s)

   ,@pos=@pos-1

 return(case @pos when 1

   then case when @i>0 then left(@s,@i-1) else @s end

   else '' end)

end

go