您的位置:首页 > 数据库

SQL Server实现split功能

2013-12-18 09:45 344 查看
<ol class="dp-sql" start="1"><li class="alt"><span><span class="comment">--实现split功能 的函数
</span><span> 
</span></span></li><li class="alt"><span><span>
</span></span></li><li><span><span class="keyword">create</span><span> </span><span class="keyword">function</span><span> f_split(@SourceSql </span><span class="keyword">varchar</span><span>(8000),@StrSeprate </span><span class="keyword">varchar</span><span>(10))  </span></span></li><li class="alt"><span><span class="keyword">returns</span><span> @</span><span class="keyword">temp</span><span> </span><span class="keyword">table</span><span>(a </span><span class="keyword">varchar</span><span>(100))  </span></span></li><li><span><span class="keyword">as</span><span>   </span></span></li><li class="alt"><span><span class="keyword">begin</span><span>  </span></span></li><li><span><span class="keyword">declare</span><span> @i </span><span class="keyword">int</span><span>  </span></span></li><li class="alt"><span><span class="keyword">set</span><span> @SourceSql=rtrim(ltrim(@SourceSql))  </span></span></li><li><span><span class="keyword">set</span><span> @i=charindex(@StrSeprate,@SourceSql)  </span></span></li><li class="alt"><span>while @i>=1  </span></li><li><span><span class="keyword">begin</span><span>  </span></span></li><li class="alt"><span><span class="keyword">insert</span><span> @</span><span class="keyword">temp</span><span> </span><span class="keyword">values</span><span>(</span><span class="func">left</span><span>(@SourceSql,@i-1))  </span></span></li><li><span><span class="keyword">set</span><span> @SourceSql=</span><span class="func">substring</span><span>(@SourceSql,@i+1,len(@SourceSql)-@i)  </span></span></li><li class="alt"><span><span class="keyword">set</span><span> @i=charindex(@StrSeprate,@SourceSql)  </span></span></li><li><span><span class="keyword">end</span><span>  </span></span></li><li class="alt"><span>if @SourceSql<><span class="string">'\'</span><span>  </span></span></li><li><span><span class="keyword">insert</span><span> @</span><span class="keyword">temp</span><span> </span><span class="keyword">values</span><span>(@SourceSql)  </span></span></li><li class="alt"><span><span class="keyword">return</span><span>   </span></span></li><li><span><span class="keyword">end</span><span>  </span></span></li><li class="alt"><span>  </span></li><li><span>go 
</span></li></ol>

--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([xueke] varchar(50),[hits] int)
insert [a]
select '数学,语文',2 union all
select '语文,英语',3 union all
select '化学,物理',4 union all
select '物理,生物',6 union all
select '化学',3

if object_id('[b]') is not null drop table [b]
go
create table [b]([xueke] varchar(50),[hits] int)

select row_number() over(order by xueke ) as rn,* into #a from a

declare @i int ,@j int ,@k varchar(10),@l int
set @i =1
select @j=max(rn) from #a
while(@i<=@j)
begin
select @k=[xueke],@l= [hits] from #a where rn =@i
insert into b select a,@l from  dbo.f_split(@k,',')
set @i=@i+1
end
select xueke ,sum(hits) as hits from b group by xueke
xueke                                              hits

-------------------------------------------------- -----------

化学                                                 7

生物                                                 6

数学                                                 2

物理                                                 10

英语                                                 3

语文                                                 5

(6 行受影响)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  split 函数 SQL Server