首页 > 数据库技术 > 详细

数据库自定义表值函数Split(@LongStr, @SplitStr, @IsDistinct )

时间:2014-12-31 18:19:38      阅读:236      评论:0      收藏:0      [点我收藏+]

CREATE FUNCTION [dbo].[F3_Split](@LongStr VARCHAR(MAX),@SplitStr VARCHAR(100),@IsDistinct BIT)
RETURNS @RTable TABLE(ID INT IDENTITY PRIMARY KEY,ShortStr VARCHAR(MAX))
AS BEGIN
 IF ISNULL(@LongStr,‘‘)=‘‘ --表达式为空或NULL直接返回空表
  RETURN
 IF ISNULL(@SplitStr,‘‘)=‘‘ --分隔符为空直接返回一条记录的表(存放表达式)
 BEGIN
  INSERT INTO @RTable(ShortStr) SELECT @LongStr
  RETURN
 END
 DECLARE @Split_len INT
 DECLARE @LongStr_len INT
 SET @Split_len=LEN(@SplitStr) --分隔符的长度
 SET @LongStr_len=LEN(@LongStr) --目前表达式的长度
 WHILE CHARINDEX(@SplitStr,@LongStr)>0
 BEGIN
  DECLARE @ShortStr VARCHAR(1000) --分割后的字符串
  SET @ShortStr=SUBSTRING(@LongStr,1,CHARINDEX(@SplitStr,@LongStr)-1) --每次从第1个位置开始取分隔符所在的位置-1为一截
  SET @LongStr=SUBSTRING(@LongStr,CHARINDEX(@SplitStr,@LongStr)+@Split_len,(@LongStr_len-LEN(@ShortStr)-@Split_len)) --变换表达式的值为剩下的
  SET @LongStr_len=LEN(@LongStr) --变换表达式的长度
  IF @ShortStr<>‘‘ AND @IsDistinct=1
   INSERT INTO @RTable(ShortStr) SELECT @ShortStr
   WHERE NOT EXISTS(SELECT 1 FROM @RTable WHERE ShortStr=@ShortStr) --将分割出来的字符串放入表中
  ELSE IF @ShortStr<>‘‘
   INSERT INTO @RTable(ShortStr) SELECT @ShortStr
 END
 IF @LongStr<>‘‘  AND @IsDistinct=1 --如果最后一截没有分隔符,则直接进入表中
  INSERT INTO @RTable(ShortStr) SELECT @LongStr
  WHERE NOT EXISTS(SELECT 1 FROM @RTable WHERE ShortStr=@LongStr)
 ELSE IF @LongStr<>‘‘
  INSERT INTO @RTable(ShortStr) SELECT @LongStr
 RETURN
END

数据库自定义表值函数Split(@LongStr, @SplitStr, @IsDistinct )

原文:http://www.cnblogs.com/wangyulong/p/4196183.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!