分割字符串函数
字符串:
12,-1.0,N;13,-1.0,N;14,-1.0,N;15,-1.0,N;16,-1.0,N;17,-1.0,N;18,-1.0,N;19,-1.0,N;20,-1.0,N;21,-1.0,N;22,-1.0,N;23,-1.0,N;00,-1.0,N;01,-1.0,N;02,-1.0,N;03,-1.0,N;04,-1.0,N;05,-1.0,N;06,-1.0,N;07,-1.0,N;08,-1.0,N;09,-1.0,N;10,-1.0,N;11,-1.0,N;
需求:写一个函数先以 ;分割,然后再取出第二个值(上例中每个;分割下来的-1),最后把这些值avg 再返回一个值
实现:函数,存储过程都可以,只要能实现这个功能就行,想了好久不知道怎么实现,看了网上的例子分割实现了,但是再分割的时候就蒙了。。
附一个参考例子地址:
http://wenku.baidu.com/view/4b0dcd5ebe23482fb4da4cdc.html
滴水之恩,无以回报,先谢谢诸位仁兄了。 数据库
[解决办法]
能不能上点数据和结果
要分成什么样子的。
以数据表示出来。
[解决办法]
/*
DROP FUNCTION dbo.Split
SELECT * from dbo.Split(@s,';')
*/
CREATE FUNCTION dbo.Split
(
@SplitString varchar(8000),-- nvarchar(4000)
@Separator varchar(2) = ','
)
RETURNS @SplitStringsTable TABLE
(
[id] int identity(1,1),
[value] varchar(8000)-- nvarchar(4000)
)
AS
BEGIN
DECLARE @CurrentIndex int;
DECLARE @NextIndex int;
DECLARE @ReturnText varchar(8000);-- nvarchar(4000)
SELECT @CurrentIndex=1;
WHILE(@CurrentIndex<=len(@SplitString))
BEGIN
SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
IF(@NextIndex=0 OR @NextIndex IS NULL)
SELECT @NextIndex=len(@SplitString)+1;
SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
INSERT INTO @SplitStringsTable([value])
VALUES(@ReturnText);
SELECT @CurrentIndex=@NextIndex+1;
END
RETURN;
END
declare @s nvarchar(4000)
set @s='12,-1.0,N;13,-1.0,N;14,-1.0,N;15,-1.0,N;16,-1.0,N;17,-1.0,N;18,-1.0,N;19,-1.0,N;20,-1.0,N;21,-1.0,N;22,-1.0,N;23,-1.0,N;00,-1.0,N;01,-1.0,N;02,-1.0,N;03,-1.0,N;04,-1.0,N;05,-1.0,N;06,-1.0,N;07,-1.0,N;08,-1.0,N;09,-1.0,N;10,-1.0,N;11,-1.0,N;'
SELECT * from dbo.Split(@s,';')
/*
idvalue
------------------------------
112,-1.0,N
213,-1.0,N
314,-1.0,N
415,-1.0,N
516,-1.0,N
617,-1.0,N
718,-1.0,N
819,-1.0,N
920,-1.0,N
1021,-1.0,N
1122,-1.0,N
1223,-1.0,N
1300,-1.0,N
1401,-1.0,N
1502,-1.0,N
1603,-1.0,N
1704,-1.0,N
1805,-1.0,N
1906,-1.0,N
2007,-1.0,N
2108,-1.0,N
2209,-1.0,N
2310,-1.0,N
2411,-1.0,N
*/