多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 數(shù)據(jù)庫(kù) > Sqlserver > Sql字符串分組Split函數(shù)的兩種實(shí)現(xiàn)方法

Sql字符串分組Split函數(shù)的兩種實(shí)現(xiàn)方法

來(lái)源:程序員人生   發(fā)布時(shí)間:2013-10-19 20:28:45 閱讀次數(shù):2813次
在給文章加自定義標(biāo)簽時(shí),需要在存儲(chǔ)過(guò)程中對(duì)輸入的字符串按照“,”字符分割成一個(gè)字符數(shù)組。但是Sql中沒(méi)有實(shí)現(xiàn)字符串分組的Split方法。因此就需要編寫一個(gè)自定義的Split函數(shù)。我首先是使用表值函數(shù)的方法實(shí)現(xiàn)的字符串分組,但是在使用中感覺(jué)不是很方便。后來(lái)又在網(wǎng)上找到了一種使用兩個(gè)標(biāo)量函數(shù),其中一個(gè)函數(shù)首先返回分割后字符數(shù)組的長(zhǎng)度,另一個(gè)函數(shù)依次返回每個(gè)分割出的字符串。然后使用循環(huán)依次獲取分割的字符。

表值函數(shù)實(shí)現(xiàn)Split方法
1 Create FUNCTION [dbo].[SplitToTable]
2 (
3 @SplitString nvarchar(max),
4 @Separator nvarchar(10)=' '
5 )
6 RETURNS @SplitStringsTable TABLE
7 (
8 [id] int identity(1,1),
9 [value] nvarchar(max)
10 )
11 AS
12 BEGIN
13 DECLARE @CurrentIndex int;
14 DECLARE @NextIndex int;
15 DECLARE @ReturnText nvarchar(max);
16 SELECT @CurrentIndex=1;
17 WHILE(@CurrentIndex<=len(@SplitString))
18 BEGIN
19 SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
20 IF(@NextIndex=0 OR @NextIndex IS NULL)
21 SELECT @NextIndex=len(@SplitString)+1;
22 SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
23 INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
24 SELECT @CurrentIndex=@NextIndex+1;
25 END
26 RETURN;
27 END

select * FROm dbo.SplitToTable('111,b2222,323232,32d,e,323232f,g3222', ',')

結(jié)果為

id value
----------- ---------------------------------------
1 111
2 b2222
3 323232
4 32d
5 e
6 323232f
7 g3222

(7 行受影響)

使用循環(huán)的方法

首先GetSplitLength函數(shù)返回分割后的字符數(shù)組的長(zhǎng)度。

1 Create function [dbo].[GetSplitLength]
2 (
3 @String nvarchar(max), --要分割的字符串
4 @Split nvarchar(10) --分隔符號(hào)
5 )
6 returns int
7 as
8 begin
9 declare @location int
10 declare @start int
11 declare @length int
12
13 set @String=ltrim(rtrim(@String))
14 set @location=charindex(@split,@String)
15 set @length=1
16 while @location<>0
17 begin
18 set @start=@location+1
19 set @location=charindex(@split,@String,@start)
20 set @length=@length+1
21 end
22 return @length
23 end

select dbo.GetSplitLength('111,b2222,323232,32d,e,323232f,g3222',',')

結(jié)果為7。

GetSplitOfIndex函數(shù)是按順序分別獲取分割后的字符串。

1 ALTER function [dbo].[GetSplitOfIndex]
2 (
3 @String nvarchar(max), --要分割的字符串
4 @split nvarchar(10), --分隔符號(hào)
5 @index int --取第幾個(gè)元素
6 )
7 returns nvarchar(1024)
8 as
9 begin
10 declare @location int
11 declare @start int
12 declare @next int
13 declare @seed int
14
15 set @String=ltrim(rtrim(@String))
16 set @start=1
17 set @next=1
18 set @seed=len(@split)
19
20 set @location=charindex(@split,@String)
21 while @location<>0 and @index>@next
22 begin
23 set @start=@location+@seed
24 set @location=charindex(@split,@String,@start)
25 set @next=@next+1
26 end
27 if @location =0 select @location =len(@String)+1
29
30 return substring(@String,@start,@location-@start)
31 end

select dbo.GetSplitOfIndex('111,b2222,323232,32d,e,323232f,g3222',',', 3)

結(jié)果323232。

1 DECLARE @Tags nvarchar(max);
2 SELECT @Tags='111,b2222,323232,32d,e,323232f,g3222';
3 DECLARE @Tag nvarchar(1000)
4 DECLARE @next int;
5 set @next=1
6
7 DECLARE @Length int;
8 SELECT @Length=dbo.GetSplitLength(@Tags,',')
9
10 while @next<=@Length
11 begin
12 SET @Tag = left(dbo.GetSplitOfIndex(@Tags,',',@next), 16);
13 print @Tag
14 SET @Next=@Next+1;
15 END

結(jié)果為:

111
b2222
323232
32d
e
323232f
g3222

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲日本中文 | 国产免费久久精品44 | 性色按摩过程小说 | 日韩欧美精品有码在线观看 | 久久国产一久久高清 | 欧美一区二区另类有声小说 | 看片在线麻豆免费 | 97欧美在线看欧美视频免费 | 欧美在线观看a | 国产精品福利视频手机免费观看 | 美国一级特a黄 | www.亚洲天堂.com | 在线播放 亚洲 | 中文字幕第10页 | 欧美xxxx做受欧美护士 | 国产香蕉一区二区在线网站 | 91探花国产综合在线精品 | 东京干福利 | 国产精品久久久久影院免费 | 亚洲国产欧美在线成人aaaa | 欧美xxxx精品另类 | 欧美一级高清片在线 | 国产欧美二区 | 天堂在线看 | yy6080久久亚洲精品 | 国产精品久久久久一区二区 | 欧美视频一区在线 | 欧美国产综合视频在线观看 | 美国毛片一级视频在线aa | 欧美日本一区二区三区道 | 黄a毛片| 欧美性猛交xxxx乱大交蜜桃 | 欧美性猛交xxxx | 在线看黄色网址 | 亚洲人成网亚洲欧洲无码 | 国产三级精品三级在线专区1 | 韩国午夜理伦三级2020豆豌 | 欧美黑人巨大xxxx猛交 | 亚洲一区二区三区高清视频 | 日本www高清免费视频观看 | 岛国午夜精品视频在线观看 |