延展阅读:
甲骨文股份有限公司(NASDAQ:ORCL,Oracle)是全球大型数据库软件公司.总部位于美国加州红木城的红木岸(Redwood Shores),现时首席执行官为公司创办人劳伦斯-埃里森(Lawrence J. Ellison).
Oracle WDP 全称为Oracle Workforce Development Program,是Oracle (甲骨文)公司专门面向学生、个人、在职人员等群体开设的职业发展力课程.Oracle的技术广泛应用于各行各业,其中电信、电力、金融、政府及大量制造业都需要Oracle技术人才,Oracle公司针对职业教育市场在全球推广的项目,其以低廉的成本给这部分人群提供Oracle技术培训,经过系统化的实训,让这部分人群能够迅速掌握Oracle最新的核心技术,并能胜任企业大型数据库管理、维护、开发工作.
我测试通过了,你try一下.
这个问题看似简单,其实很经典,需要用公式将表格中id 相同的行,变成同一行.然后再进行相减,公式是max(decode)连用,希望对你有帮助
create or replace function datediff
p_Subtranhend date,
p_Minuend date)
RETURN NUMBER
IS
/*************************************************************************/
/* 功 能:返回两个日期之间的天、周、月、年等数量. */
/* 入参说明: p_Component 时间元件,如年月日季度等等 */
/* p_Subtrahend 减数时间 */
/* p_Minuend 被减数时间 */
v_ReturnValue number ; -- 结果数值
v_YearNum1 number; --减数年份数
v_MonthNum1 number; --减数月份数
v_HourNum1 number; --减数时数
v_MinuteNum1 number; --减数分钟数
v_SecondNum1 number; --减数秒钟数
v_QuarterValue1 number; --减数季度数
v_WeekNum1 number; --减数与标准时间周差
BEGIN
v_Component := upper(ltrim(rtrim(p_Component)));
if v_Component in ('Y','YY','YEAR','YYYY') then --年情况
v_YearNum1 := to_number(to_char(p_Subtranhend,'YYYY'));
elsif v_Component in ('M', 'MM','MONTH', 'MON') then --月情况
--请注意,这个部分与oracle内置日期函数MONTH_BETWEEN()不同,忽略了日因素
--而后者的两个日期如都是所在月的最后一天,才返回整数,否则,返回分数
v_MonthNum1 := to_number(to_char(p_Subtranhend,'MM'));
elsif v_Component in ( 'D', 'DD', 'DAY') then --日情况
--这里与两个日期直接相减的oracle日期算术也不同,只返回整数天数;
--而后者可以返回一天的几分之几(以小数形式表达)
v_ReturnValue := to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')
- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'),'YYYY-MM-DD');
elsif v_Component in ('H', 'HH', 'HOUR') then --时情况
--第一步:求出天数
v_ReturnValue := (to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')
- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'), 'YYYY-MM-DD'));
--第二步:求出时数
elsif v_Component in ('MI','MINUTE') then --分情况
--第三步:求出分钟数
v_MinuteNum1 := to_number(to_char(p_Subtranhend,'MI'));
elsif v_Component in('S', 'SS', 'SECOND') then --秒情况
- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'),
'YYYY-MM-DD'));
--第四步:求出秒钟数
v_SecondNum1 := to_number(to_char(p_Subtranhend,'SS'));
elsif v_Component in ('Q','QQ','QUARTER') then --季度情况
v_QuarterValue1 := to_number(to_char(p_Subtranhend,'Q'));
elsif v_Component in ('W','WW','WK','WEEK') then --周情况
--一周的起始日期应当为星期日
--关于周差的计算,尝试采用中间日期的方法
--两个结果再相减,即可得到正确的数值
v_WeekNum1 := floor( (to_date(to_char(p_Subtranhend,'YYYY-MM-DD'),'YYYY-MM-DD') -
else
end if;
RETURN v_ReturnValue;
EXCEPTION
WHEN OTHERS THEN
END datediff;
oracle?两个时间相减默认的是天数
MON_BETWEEN?
-----------?
SQLselect
mon_betw from dual;?
MON_BETW?
---------?
Oracle计算时间差表达式?
--获取两时间的相差豪秒数?
/*
两个date 型可以直接相减,值的单位是天,如果不是date型 先用to_date()处理再相减.
以上就是土嘎嘎小编为大家整理的oracle时分如何相减相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!