创建一个pl / sql函数&找到闰年

时间:2014-01-06 10:13:34

标签: oracle plsql

请通过PL / SQL函数告诉我如何找到闰年。假设我们输入任何数字,我们怎么能发现它是闰年?

2 个答案:

答案 0 :(得分:12)

尝试以下功能,

FUNCTION leap_year_or_not(
         i_year IN NUMBER)
         RETURN VARCHAR2
IS
     l_var VARCHAR2(20);
BEGIN
     IF TO_CHAR(LAST_DAY(TO_DATE('01/02/'||i_year, 'dd/mm/yyyy')), 'DD') = 29 THEN
          l_var := 'Leap Year';
     ELSE
          l_var := 'Not Leap Year';
     END IF;
     RETURN l_var;                 
END;

答案 1 :(得分:4)

基本上,如果一年可以被4整除而没有余数而不是100则是闰年。但是,如果年份可以被4和100整除而没有余数,那么它也应该被400整除为闰年。

这是一个功能,它会告诉你你提供的一年是否是一个跳跃可能看起来像这样:

 create or replace package utl is
   function is_leap_year(p_year in number) return number;
 end;
/
Package created


create or replace package body utl is
  function is_leap_year(p_year in number) return number is
  begin
     return case
              when ( mod(p_year, 4) = 0 and mod(p_year, 100) <> 0 ) or
                   ( mod(p_year, 400) = 0 ) then 1
              else 0
            end;
  end;
end;
/
Package body created

测试用例:

SQL> select 1999 + level                    as test_year
  2       , utl.is_leap_year(1999 + level)  as is_leap
  3    from dual
  4  connect by level <= 12
  5  ;

结果:

 TEST_YEAR    IS_LEAP
---------- ----------
      2000          1
      2001          0
      2002          0
      2003          0
      2004          1
      2005          0
      2006          0
      2007          0
      2008          1
      2009          0
      2010          0
      2011          0

12 rows selected