在SqlServer中把字符串以某个字符分隔,相当于其他编程语言中的split函数,把结果存储到临时表中,此处用函数来表示,(转贴)
/*--字符串分函数
分拆指定分隔符的的字符串,返回结果表 */
/*--调用示例
SELECT * FROM f_splitSTR('aa ba b','a ')
--*/
CREATE FUNCTION f_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
/*--调用示例
SELECT * FROM f_splitSTR('aa ba b','a ')
--*/
如果需要对该表进行逐行操作,可以为该临时表加上游标(动态或静态),利用游标来对每一行进行需要的操作:
如下:
declare @splitStrN varchar(100)
declare leftcursor cursor --scroll dynamic --可以加在cursor后边,以表示是动态游标
/*scroll表示可随意移动游标指针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/
for
SELECT * FROM f_splitSTR('1,51,24,13,26',',')
--打开游标
open leftcursor
fetch next from leftcursor into @splitStrN
while(@@fetch_status=0)
begin
if((@splitStrN is null) or (@splitStrN=''))
begin
set @splitStrN='0'
end
else
begin
print @splitStrN
end
fetch next from leftcursor into @splitStrN
end
--关闭游标
close leftcursor
--删除游标引用
deallocate leftcursor
如果有不明白的地方可以联系我,chshdu@163.com,上边拆分字符串的函数是从网络上别人写好的,我当了下来,如果不当的地方,请联系我,我会马上删除,在此致谢!