请通过PL / SQL函数告诉我如何找到闰年。假设我们输入任何数字,我们怎么能发现它是闰年?
答案 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