Sql Server中常用的6个自定义函数分享

转自:http://www.jb51.net/article/56691.htm

 

 1 IF OBJECT_ID('DBO.DISTINCT_STR') IS NOT NULL
 2 DROP FUNCTION DBO.DISTINCT_STR
 3 GO
 4 --此函数操作形如["a", "b", 1,2,3,1,"a"]的数组,去重后,["b",1,2,3]
 5 --@S(原有参数), @SPLIT(分隔符), @NEW_STR(新添加字符串)
 6 CREATE FUNCTION DISTINCT_STR(@S NVARCHAR(300),@SPLIT VARCHAR(50),@NEW_STR VARCHAR(300))
 7 RETURNS VARCHAR(300)
 8 AS
 9 BEGIN
10 DECLARE @NEW VARCHAR(200),@INDEX INT,@TEMP VARCHAR(200)
11 
12 IF CHARINDEX(']',@S)>0 and CHARINDEX(']', @S) > 0
13 SET @S=SUBSTRING(@S,charindex('[',@S)+1,LEN(@S)-2) + @SPLIT + @NEW_STR
14 ELSE
15 SET @S=@NEW_STR
16 
17 IF LEFT(@S,1)<>@SPLIT
18 SET @S = @SPLIT+@S
19 IF RIGHT(@S,1)<>@SPLIT
20 SET @S = @S+@SPLIT
21 WHILE CHARINDEX(@SPLIT,@S)>0 AND LEN(@S)<>1
22 BEGIN
23 SET @INDEX = CHARINDEX(@SPLIT,@S)
24 SET @TEMP = LEFT(@S,CHARINDEX(@SPLIT,@S,@INDEX+LEN(@SPLIT)))
25 IF @NEW IS NULL
26 SET @NEW = ISNULL(@NEW,'')+@TEMP
27 ELSE
28 SET @NEW = ISNULL(@NEW,'')+REPLACE(@TEMP,@SPLIT,'')+@SPLIT
29 WHILE CHARINDEX(@TEMP,@S)>0
30 BEGIN
31 SET @S=STUFF(@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT),CHARINDEX(@SPLIT,@S,CHARINDEX(@TEMP,@S)+LEN(@SPLIT))-CHARINDEX(@TEMP,@S),'')
32 END
33 END
34 RETURN '['+RIGHT(LEFT(@NEW,LEN(@NEW)-1),LEN(LEFT(@NEW,LEN(@NEW)-1))-1)+']'
35 END
36 GO

 

posted on 2018-01-30 16:35  lpx15312  阅读(195)  评论(0编辑  收藏  举报

导航