首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

瓜分字符串函数

2013-09-12 
分割字符串函数字符串:12,-1.0,N13,-1.0,N14,-1.0,N15,-1.0,N16,-1.0,N17,-1.0,N18,-1.0,N19,-1.0,

分割字符串函数
字符串:

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
*/



第一步实现了,还有“最后把这些值avg 再返回一个值”,这句话什么理解,想要avg哪个值 ?

热点排行