关于类似split函数的实现,请教
查到很多自定义函数都是模拟split取出各个分段的,如   
 |a|b|c|d|      的到      a   b   c   d   四个   
 我需要已知   b   要得到   它在|a|b|c|d|   第几个(第二个)   
 请大侠帮忙,谢谢
------解决方案----------------------在uf_split函数里加自增列   
 CREATE function uf_split 
 ( 
 @str varchar(8000)	--要分拆的字符串 
 ,@spli varchar(10)	--字符串分隔符 
 ) 
 returns @retab table(id int identity(1,1),istr varchar(8000)) 
 as 
 begin 
 	declare @i     int 
 	declare @splen int 
 	select @splen=len(@spli),@i=charindex(@spli,@str) 
 	while @i >  0 
 	begin 
 		insert into @retab  
 		values(left(@str,@i-1)) 
 		select @str=substring(@str,@i+@splen,8000) 
 		select @i=charindex(@spli,@str) 
 	end 
 	if @str <>  ' ' insert into @retab values(@str) 
 	return 
 end   
 select id from uf_split( 'ab|abc|b|cbd|dds|acb ', '| ') 
 where istr= 'b ' 
 /* 
 id           
 -----------  
 3   
 (所影响的行数为 1 行) 
 */
------解决方案--------------------邹老大的例子: 
 --分段截取函数 
 CREATE FUNCTION dbo.f_GetStr( 
 @s varchar(8000),      --包含多个数据项的字符串 
 @pos int,             --要获取的数据项的位置 
 @split varchar(10)     --数据分隔符 
 )RETURNS varchar(100) 
 AS 
 BEGIN 
 	IF @s IS NULL RETURN(NULL) 
 	DECLARE @splitlen int 
 	SELECT @splitlen=LEN(@split+ 'a ')-2 
 	WHILE @pos> 1 AND CHARINDEX(@split,@s+@split)> 0 
 		SELECT @pos=@pos-1, 
 			@s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen, ' ') 
 	RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1), ' ')) 
 END 
 GO 
------解决方案--------------------declare @str varchar(800),@str1 varchar(100) 
 set @str1= '|cbd| ' 
 set @str= '|ab|abc|b|cbd|dds|acb| ' 
 print(dbo.f_1(@str,@str1))   
 输出 
 -------- 
 4