oracle时间相减?oracle两个时间相减得到分钟

牵着乌龟去散步 万象 17

今天给各位分享oracle时间相减的知识,其中也会对oracle两个时间相减得到分钟进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录

  1. oracle 时间相减函数
  2. Oracle中两个to_date相减能得到天数吗
  3. 在Oracle中怎么求两个时间相差的天数

一、oracle 时间相减函数

创建一个日期比较的函数(datediff,网上找的),然后通过该函数返回天数×8.5就是总共的小时数了,如果要精确点的话,就把首尾天数中的时间差刨了即可。

create or replace function datediff

/*************************************************************************/

/*功能:返回两个日期之间的天、周、月、年等数量。*/

/*入参说明: p_Component时间元件,如年月日季度等等*/

/*************************************************************************/

v_Ret *** nValue number;--结果数值

v_Component varchar2(10);--日期组件中间转换形式,截取空格并且转为大写

v_YearNum1 number;--减数年份数

v_YearNum2 number;--被减数年份数

v_MonthNum1 number;--减数月份数

v_MonthNum2 number;--被减数月份数

v_Ho *** Num2 number;--被减数时数

v_MinuteNum1 number;--减数分钟数

v_MinuteNum2 number;--被减数分钟数

v_SecondNum1 number;--减数秒钟数

oracle时间相减?oracle两个时间相减得到分钟-第1张图片-

v_SecondNum2 number;--减数秒钟数

v_QuarterValue1 number;--减数季度数

v_QuarterValue2 number;--被减数季度数

v_WeekNum1 number;--减数与标准时间周差

v_WeekNum2 number;--被减数与标准时间周差

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'));

v_YearNum2:= to_number(to_char(p_Minuend,'YYYY'));

v_Ret *** nValue:= v_YearNum2- v_YearNum1;

elsif v_Component in('M','MM','MONTH','MON') then--月情况

--请注意,这个部分与oracle内置日期函数MONTH_BETWEEN()不同,忽略了日因素

--而后者的两个日期如都是所在月的最后一天,才返回整数,否则,返回分数

--而且这个分数是以31天作为一个月进行计算的结果

v_YearNum1:= to_number(to_char(p_Subtranhend,'YYYY'));

v_YearNum2:= to_number(to_char(p_Minuend,'YYYY'));

v_MonthNum1:= to_number(to_char(p_Subtranhend,'MM'));

v_MonthNum2:= to_number(to_char(p_Minuend,'MM'));

v_Ret *** nValue:=(v_YearNum2- v_YearNum1)*12+(v_MonthNum2- v_MonthNum1);

elsif v_Component in('D','DD','DAY') then--日情况

--这里与两个日期直接相减的oracle日期算术也不同,只返回整数天数;

--而后者可以返回一天的几分之几(以小数形式表达)

v_Ret *** nValue:= 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_Ret *** nValue:=(to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')

- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'),'YYYY-MM-DD'));

v_Ho *** Num1:= to_number(to_char(p_Subtranhend,'HH24'));

v_Ho *** Num2:= to_number(to_char(p_Minuend,'HH24'));

v_Ret *** nValue:= v_Ret *** nValue*24+(v_Ho *** Num2- v_Ho *** Num1);

elsif v_Component in('MI','MINUTE') then--分情况

v_Ret *** nValue:=(to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')

- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'),'YYYY-MM-DD'));

v_Ho *** Num1:= to_number(to_char(p_Subtranhend,'HH24'));

v_Ho *** Num2:= to_number(to_char(p_Minuend,'HH24'));

v_Ret *** nValue:= v_Ret *** nValue*24+(v_Ho *** Num2- v_Ho *** Num1);

v_MinuteNum1:= to_number(to_char(p_Subtranhend,'MI'));

v_MinuteNum2:= to_number(to_char(p_Minuend,'MI'));

v_Ret *** nValue:= v_Ret *** nValue*60+(v_MinuteNum2- v_MinuteNum1);

elsif v_Component in('S','SS','SECOND') then--秒情况

v_Ret *** nValue:=(to_date(to_char(p_Minuend,'yyyy-mm-dd'),'YYYY-MM-DD')

- to_date(to_char(p_Subtranhend,'yyyy-mm-dd'),

v_Ho *** Num1:= to_number(to_char(p_Subtranhend,'HH24'));

v_Ho *** Num2:= to_number(to_char(p_Minuend,'HH24'));

v_Ret *** nValue:= v_Ret *** nValue*24+(v_Ho *** Num2- v_Ho *** Num1);

v_MinuteNum1:= to_number(to_char(p_Subtranhend,'MI'));

v_MinuteNum2:= to_number(to_char(p_Minuend,'MI'));

v_Ret *** nValue:= v_Ret *** nValue*60+(v_MinuteNum2- v_MinuteNum1);

v_SecondNum1:= to_number(to_char(p_Subtranhend,'SS'));

v_SecondNum2:= to_number(to_char(p_Minuend,'SS'));

v_Ret *** nValue:= v_Ret *** nValue*60+(v_SecondNum2- v_SecondNum1);

elsif v_Component in('Q',' *** ','QUARTER') then--季度情况

v_YearNum1:= to_number(to_char(p_Subtranhend,'YYYY'));

v_YearNum2:= to_number(to_char(p_Minuend,'YYYY'));

v_QuarterValue1:= to_number(to_char(p_Subtranhend,'Q'));

v_QuarterValue2:= to_number(to_char(p_Minuend,'Q'));

v_Ret *** nValue:=(v_YearNum2- v_YearNum1)*4+(v_QuarterValue2- v_QuarterValue1);

elsif v_Component in('W','WW','WK','WEEK') then--周情况

--关于周差的计算,尝试采用中间日期的 ***

--经查,‘1-1-2’即公元一年1月2日为周日,我们就可以用两个时间分别与其相减求周差

--两个结果再相减,即可得到正确的数值

v_WeekNum1:= floor((to_date(to_char(p_Subtranhend,'YYYY-MM-DD'),'YYYY-MM-DD')-

to_date('1-1-2','YYYY-MM-DD'))/7);

v_WeekNum2:= floor((to_date(to_char(p_Minuend,'YYYY-MM-DD'),'YYYY-MM-DD')-

to_date('1-1-2','YYYY-MM-DD'))/7);

v_Ret *** nValue:= v_WeekNum2- v_WeekNum1;

二、Oracle中两个to_date相减能得到天数吗

Oracle中两个to_date相减能得到天数,解决 *** 如下:

1、首先打开Oracle管理工具,执行如下图所示的语句来查询一下 *** 时间,会看到显示的并不是平常用到的。

2、接下来就可以通过to_char函数来对日期函数进行转换一下,如下图所示,之一个参数是时间,第二个是格式化类型。

3、另外也可以通过To_Char函数来对日期进行拆分,分别取出年月日,如下图所示。

4、接下来还可以通过To_Date函数来对字符串进行日期转换,如下图所示。

5、最后,还可以通过To_number函数来将字符数字转换为数字来进行运算,如下图所示。

三、在Oracle中怎么求两个时间相差的天数

可以使用sql语句,将起始时间与结束时间相减就可以了,语句如下:

TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))AS相差天数 from dual;

1、在使用Oracle的to_ date函数来做日期转换时,可能会直觉地采用"yyyy-MM-dd HH:mm:ss"的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810格式代码出现两次”。

如: select to_ date(2005-01-01 13:14:20','yyy-MM-dd HH24:mm:ss') from dual;

原因是SQL中不区分大小写, MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。

select to_ date(2005-01-01 13:14:20'yyyy-MM-dd HH24:mi:s') from dual;

2、另要以24小时的形式显示出来要用HH24

select to_ char(sysdate,'yyy-MM-dd HH24:miss') from dual;//mi是分钟

select to_ char(sysdate,'yyy-MM-dd HH24:mm:ss') from dual://mm会显示月份

关于oracle时间相减和oracle两个时间相减得到分钟的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签: 时间 oracle 得到 分钟 两个

抱歉,评论功能暂时关闭!