分割字符串表值函数

实际工作中,我们通常会有这样的业务场景,需要把一大串字符串,用某个特定的字符串分割出来,生成一张表。一下方法就很好的解决了这个问题。

 1 IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE ID=OBJECT_ID('fn_Split') AND XTYPE='FN')
 2 BEGIN
 3     DROP FUNCTION dbo.fn_Split
 4 END
 5 GO
 6 --功    能:分割字符串表值函数
 7 --参    数:@String 分割的字符串
 8 --          @Delimiter 分隔符
 9 --返 回 值:表
10 --创 建 人:maojw
11 --创建时间:2014-09-24
12 CREATE FUNCTION [dbo].[fn_Split](  
13  @String nvarchar (max),  
14  @Delimiter nvarchar (10)  
15 )  
16 RETURNS @ValueTable TABLE ([Value] NVARCHAR(MAX),[id] int)  
17 BEGIN  
18  DECLARE @NextString nvarchar(MAX),  
19   @Pos int,  
20   @NextPos int,  
21   @CommaCheck nvarchar(1),
22     @id int
23 
24 set @id=1  
25    
26  SET @NextString = ''  
27  SET @CommaCheck = right(@String,1)   
28    
29  SET  @String = @String + @Delimiter  
30    
31   SET @Pos = CHARINDEX(@Delimiter,@String)  
32   SET @NextPos = 1  
33    
34  WHILE (@pos <>  0)    
35  BEGIN  
36   SET @NextString = SUBSTRING(@String,1,@Pos - 1)  
37     
38   INSERT INTO @ValueTable ( [Value],[id]) VALUES (@NextString,@id)  
39     
40   SET @String = SUBSTRING(@String,@pos +1,LEN(@String))  
41      
42   SET @NextPos = @Pos  
43   SET @pos  = CHARINDEX(@Delimiter,@String)  
44 
45     set @id = @id +1
46  END  
47    
48  RETURN  
49 END  
50 GO
View Code

 

posted @ 2014-09-24 11:01  毛毛大王  阅读(203)  评论(0编辑  收藏  举报