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@lwhile @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

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

posted on 2008-06-19 13:10  冯岩  阅读(761)  评论(1编辑  收藏

导航