你的位置:首页 > 软件开发 > 数据库 > 几种分割字符串实现方法的比较

几种分割字符串实现方法的比较

发布时间:2015-06-12 00:00:06
多年前,我也有写博客,那时是写一些个人的随笔,从没想过要写跟自己工作相关的IT博客,因为网上牛人多,自己才疏学浅,所以一直在做“潜水员”,尽管自己连游泳都不会!但是我在博客园学到了许多,加上博客园简明的风格也是我喜欢的,时间长了,我也想分享 ...

几种分割字符串实现方法的比较

多年前,我也有写博客,那时是写一些个人的随笔,从没想过要写跟自己工作相关的IT博客,因为网上牛人多,自己才疏学浅,所以一直在做“潜水员”,尽管自己连游泳都不会!但是我在博客园学到了许多,加上博客园简明的风格也是我喜欢的,时间长了,我也想分享一些关于IT技术方面的经验心得,也算是对自己在工作上的一些总结吧。不求有功,但求无过。如果您有更好的建议或意见,欢迎与我交流。好了,闲话休提,进入主题。在数据库编程中,有时会遇到把字符串,按一定规则进行分割,比如“a,b,c,d,1,2,3”这样的以逗号为分隔符的字符串,需要把分割出来,分割后单独变行一行记录。首先想到的是使用替换函数把分隔符去掉。于是有了:

 1 IF (OBJECT_ID(N'Tempdb..##T1') IS NOT NULL) 2 BEGIN 3   DROP TABLE ##T1 4 END 5 GO 6  7 DECLARE @string NVARCHAR(MAX) 8 SET @string=N'123,abc,456,AAA,DDD' 9 SET @string=N'SELECT * INTO ##T1 FROM (SELECT ''' + REPLACE(@string,',',''' AS result UNION ALL SELECT ''') + ''') a' 10 EXEC(@string)11 12 SELECT * FROM ##T113 14 GO
方法2(推荐):

 

 1 IF OBJECT_ID(N'fn_split_with_rowno') IS NOT NULL 2 BEGIN 3   DROP FUNCTION fn_split_with_rowno 4 END 5  6 GO 7  8 CREATE FUNCTION fn_split_with_rowno 9 (10   @str     NVARCHAR(MAX)11  ,@split   NVARCHAR(20) = ','12 )13 RETURNS @t TABLE(row_no INT ,col NVARCHAR(500))14 AS15 BEGIN16   DECLARE @i INT17   SET @i = 018   WHILE (CHARINDEX(@split ,@str) <> 0)19   BEGIN20     INSERT @t (row_no,col)21     VALUES(@i + 1,SUBSTRING(@str ,1 ,CHARINDEX(@split ,@str) -1))   22     SET @str = STUFF(@str ,1 ,CHARINDEX(@split ,@str) + LEN(@split) -1 ,'')23     SET @i = @i + 1 24   END 25   IF (@str <> '')26     INSERT @t (row_no,col)27     VALUES(@i + 1 ,@str)28   29   RETURN30 END31 32 GO
调用函数:

1 SELECT * FROM fn_split_with_rowno(N'123,abc,456,AAA,DDD,博客园',',')

原标题:几种分割字符串实现方法的比较

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录