我需要一个针对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;
提前致谢。
答案 0 :(得分:1)
Oracle日期已经考虑了闰年。只做一个简单的减法:
RETURN p_to_date - p_from_date;
答案 1 :(得分: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;
/
Function created. 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