SqlServe中分割字符串实现 类似split()功能

数据库SQL中实现split功能
如传入变量 '1,2,3,4'则可解析成1 2 3 4
declare   @string   varchar ( 5000 )
declare   @splitchar   char ( 1 )
declare   @l   int   --  第一个分隔字符的位置
declare   @s   int   --  第二个分隔字符的位置
set   @string   = ' 1,2,3,4 '
set   @splitchar = ' , '
set   @l   =   0  
set   @s   =   charindex ( @splitchar @string @l while   @l   <=   len ( @string )
begin
 
declare   @id   nvarchar ( 50 -- 被分割出来的值  
--
 假如到最后一个字符串那么第二个分隔字符的位置就是这个字符串的长度加一
if   @s   =   0   set   @s   =   len ( @string +   1  
set   @id   =   substring ( @string @l @s   -   @l --  取值
  set   @l   =   @s   +   1
 
set   @s   =   charindex ( @splitchar @string @l )  
select   @id  
if   ltrim ( rtrim ( @id ))  <> ''   continue   --  假如是空字符串就跳过  

end

下面是函数,
set  ANSI_NULLS  ON
set  QUOTED_IDENTIFIER  ON
go



/*
-------------------------------------------
名称:f_ProdLib_splitSTR
功能:拆分关键字
编写人:
时间:20060404
-------------------------------------------
*/


ALTER   FUNCTION   [ dbo ] . [ f_ProdLib_splitSTR ] (
@s   varchar ( 8000 ),    -- 要分拆的字符串
@split   varchar ( 10 )   -- 数据分隔符
) RETURNS   @re   TABLE (col  varchar ( 100 ))
AS
BEGIN
DECLARE   @splitlen   int
SET   @splitlen = LEN ( @split + ' a ' ) - 2
WHILE   CHARINDEX ( @split , @s ) > 0
BEGIN
INSERT   @re   VALUES ( LEFT ( @s , CHARINDEX ( @split , @s ) - 1 ))
SET   @s = STUFF ( @s , 1 , CHARINDEX ( @split , @s ) + @splitlen , '' )
END
INSERT   @re   VALUES ( @s )
RETURN
END

具体用例,还没有封装好,先贴着,等有时间再整

你可能感兴趣的:(split)