关于INTERVAL DAY TO SECOND数据类型的sum问题请教!

[复制链接]
查看11 | 回复7 | 2011-2-18 11:43:33 | 显示全部楼层 |阅读模式
我表中有一列专门是计算时间差的!数据类型为INTERVAL DAY TO SECOND!
现在现在我要统计这些数据是多少用SUM!
提示:ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND
请问INTERVAL DAY TO SECOND数据类型的数据如何统计?
如果转成number后计算会不会有问题?
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
晕,你要统计什么???对日期进行sum???那肯定不行,先搞清楚需求
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
表中的这列保存的是查询结束时间-查询开始时间=时间差
我要统计这个表中的所有时间差的合计!如何做?
那时间怎么统计?
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
http://asktom.oracle.com/pls/ask ... ON_ID:5269744394385
看看这个
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
非常感谢dingjun123 djゆoracle !虽然不是很明白不过这个就是我要找的答案 再次感谢 我去研究研究!
大体思路就是需要自己创建一个函数,系统本身没有是吧!
[ 本帖最后由 sosdxy 于 2011-1-12 16:08 编辑 ]
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
非常感谢dingjun123!下面是我完成的结果:
create or replace type day_to_second_sum_type as object
( totalINTERVAL DAY(4) TO SECOND(6),
static function ODCIAggregateinitialize(sctx in out day_to_second_sum_type) return number,
member function ODCIAggregateIterate(self IN OUT day_to_second_sum_type,value IN interval day to second) return number,
member function ODCIAggregateTerminate(self IN day_to_second_sum_type,returnValue OUT interval day to second,flags IN number) return number,
member function ODCIAggregateMerge(self IN OUT day_to_second_sum_type,ctx2 IN day_to_second_sum_type) return number
);

create or replace type body day_to_second_sum_type is
static function ODCIAggregateInitialize(sctx IN OUT day_to_second_sum_type) return number is
begin
sctx:= day_to_second_sum_type(numtodsinterval( 0,'SECOND'));
return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT day_to_second_sum_type,value IN interval day to second) return number is
begin
self.total:=self.total+value;
return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN day_to_second_sum_type,returnValue OUT interval day to second,flags IN number) return number is
begin
returnValue:=self.total;
return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT day_to_second_sum_type,ctx2 IN day_to_second_sum_type) return number is
begin
self.total:=self.total+ctx2.total;
return ODCIConst.Success;
end;
end;

CREATE OR REPLACE FUNCTION ds_sum(input interval day to second) RETURN interval day to second
PARALLEL_ENABLE AGGREGATE USING day_to_second_sum_type;

select ds_sum(sosdxy) from dxy;
DS_SUM(sosdxy)
------------------------------------------------------
+000000001 08:09:59.984000000
[ 本帖最后由 sosdxy 于 2011-1-13 15:50 编辑 ]
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
good,我保存下来,哈哈
回复

使用道具 举报

千问 | 2011-2-18 11:43:33 | 显示全部楼层
以后还得多多请教你当然为了报答你我会将我所有的完成结果发出来 虽然他们看上去很简单但是对于我都是一份不小的收获!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行