0

我需要一个用于 Oracle 11g 的存储过程,它计算两个日期之间的确切天数,其中一些月份有 28 天,而另一些月份有 30 天。

我也有管理闰年的问题。任何想法来填充程序主体?

CREATE OR REPLACE FUNCTION days(p_from_date IN DATE, p_to_date IN DATE)
RETURN NUMBER

 -- Insert your code here!

END;

提前致谢。

4

2 回答 2

1

Oracle 日期已经考虑了闰年。只需做一个简单的减法:

RETURN p_to_date - p_from_date;
于 2013-08-20T02:43:34.493 回答
0

我用这个,效果很好:

CREATE OR REPLACE FUNCTION days(p_from_date IN DATE, p_to_date IN DATE)
   RETURN NUMBER IS
b_days NUMBER;
BEGIN

  b_days := TRUNC(p_to_date) - TRUNC(p_from_date)  
       - ((TRUNC(p_to_date,'D')-TRUNC(to_date(p_from_date),'D'))/7)*2
       + 1;

  IF TO_CHAR(p_to_date,'D') = '7' THEN
    b_days := b_days - 1;
  END IF;

  IF TO_CHAR(p_from_date,'D') = '1' THEN
    b_days := b_days - 1;
  END IF;
  RETURN(b_days);

END;

/

创建的函数。

SQL> select days(to_date('01/11/2007','dd/mm/yyyy'),to_date('06/11/2007','dd/mm/yyyy')) from dual;

DAYS(TO_DATE('01/11/2007','DD/MM/YYYY'),TO_DATE('06/11/2007','DD/MM/YYYY'))
-------------------------------------------------- -------------------------
                                                                          4
于 2013-08-19T22:39:57.660 回答