日期:2014-05-17  浏览次数:20612 次

分割字符串函数
字符串:

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;