Re: leap year

Please consider this and add extra logic, if necessary.

CREATE OR REPLACE FUNCTION cl (
   dfrom                            DATE
, dto                              DATE
)
RETURN NUMBER
IS
   ln                               NUMBER := 0;
BEGIN
   FOR i IN (EXTRACT (YEAR FROM dfrom))..(EXTRACT (YEAR FROM dto))
   LOOP
     ln := ln
         + CASE
             WHEN MOD(i, 4) = 0
              AND NOT ((MOD(i, 100) = 0) AND (MOD(i, 400) > 0))
             THEN 1
             ELSE 0
           END;
   END LOOP;
   RETURN ln;
END;
/

SQL> VAR c NUMBER
SQL> EXEC :c := cl(TO_DATE('11.27.1976', 'MM.DD.YYYY'), SYSDATE);
SQL> PRINT c

          C
----------
          8
-- 
Vladimir Begun
The statements and opinions expressed here are my
own and do not necessarily represent those of Oracle.
--
http://www.freelists.org/webpage/oracle-l

Other related posts: