//閏年最直接的判斷是:能被4整除且不能被100整除,或者能被400整除的年份 create or replace procedure pro_leap_year(year_in
//閏年最直接的判斷是:能被4整除且不能被100整除,或者能被400整除的年份
create or replace procedure pro_leap_year(year_in in number)
as
v_mod1 number(4) :=mod(year_in,4);
v_mod2 number(4) :=mod(year_in,100);
v_mod3 number(4) :=mod(year_in,400);
begin
if ((v_mod1=0 and v_mod2<>0) or v_mod3=0) then
dbms_output.put_line(year_in||' is a leap year');
else dbms_output.put_line(year_in||' is not a leap year');
end if;
exception
when others then
dbms_output.put_line(sqlerrm);
end pro_leap_year;
/
SQL> exec pro_leap_year(2010);
2010 is not a leap year
PL/SQL procedure successfully completed
//
SQL> exec pro_leap_year(2000);
2000 is a leap year
PL/SQL procedure successfully completed
//
//關于閏年平年,下面有一個比較全面的解釋:
//在公曆(格裡曆)紀年中,,有閏日的年份叫閏年,一般年份365天,閏年為366天。
//由于地球繞太陽運作周期為365天5小時48分46秒(合365.24219天)即一回歸年,公曆把一年定為365天。
//所餘下的時間約為四年累計一天,加在二月裡,是以平常年份每年365天,二月為28天,閏年為366天,二月為29天。
//是以,每400年中有97個閏年,閏年在2月末增加一天,閏年366天。
//閏年的計算方法:公元紀年的年數可以被四整除,即為閏年;
//被100整除而不能被400整除為平年;被100整除也可被400整除的為閏年。
//如2000年是閏年,而1900年不是。
//
//我們所關心的是怎麼樣計算指定的一個年份是否是閏年:
//從上面的描述中,我們知道:
//如果一年中2月份有29天,那麼這一年就是閏年,否則是平年
SQL> drop procedure pro_leap_year;
Procedure dropped
//
create or replace procedure pro_leap_year(year_in in number)
as
v_year_in varchar2(10) :=to_char(year_in)||'0229';
v_date date;
begin
//這裡将拼接的字元串轉換為日期,并指派給一個日期類型的變量,
//其實就是為了和日期類型進行比較,隐式的比較,比較你輸入的年份中2月是否含有29日這一天
v_date :=to_date(v_year_in,'yyyy-mm-dd');
dbms_output.put_line(year_in||' is a leap year');
exception
when others then
dbms_output.put_line(year_in||' is not a leap year');
end pro_leap_year;
/
SQL> exec pro_leap_year(2010);
2010 is not a leap year
PL/SQL procedure successfully completed
//
SQL> exec pro_leap_year(2000);
2000 is a leap year
PL/SQL procedure successfully completed
//
SQL> exec pro_leap_year(2005);
2005 is not a leap year
PL/SQL procedure successfully completed
//
SQL> exec pro_leap_year(2100);
2100 is not a leap year
PL/SQL procedure successfully completed
//
//我們也可以用一條select語句來判斷:
SQL> select case
2 when to_char(last_day(to_date(&year||'02','yyyymm')),'dd')='29'
3 then 'the year you input is a leap year'
4 else 'the year you input is not a leap year'
5 end is_leap_year
6 from dual;
Enter value for year: 2050
old 2: when to_char(last_day(to_date(&year||'02','yyyymm')),'dd')='29'
new 2: when to_char(last_day(to_date(2050||'02','yyyymm')),'dd')='29'
IS_LEAP_YEAR
-------------------------------------
the year you input is not a leap year
//
SQL> /
Enter value for year: 2000
old 2: when to_char(last_day(to_date(&year||'02','yyyymm')),'dd')='29'
new 2: when to_char(last_day(to_date(2000||'02','yyyymm')),'dd')='29'
IS_LEAP_YEAR
---------------------------------
the year you input is a leap year
//
SQL> /
Enter value for year: 2012
old 2: when to_char(last_day(to_date(&year||'02','yyyymm')),'dd')='29'
new 2: when to_char(last_day(to_date(2012||'02','yyyymm')),'dd')='29'
IS_LEAP_YEAR
---------------------------------
the year you input is a leap year
//
SQL> /
Enter value for year: 1998
old 2: when to_char(last_day(to_date(&year||'02','yyyymm')),'dd')='29'
new 2: when to_char(last_day(to_date(1998||'02','yyyymm')),'dd')='29'
IS_LEAP_YEAR
-------------------------------------
the year you input is not a leap year
//
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ybn9GbvwVZslmZ4Vnbpx2Lc52YuAHaw5yd3d3Lc9CX6MHc0RHaiojIsJye.gif)
本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!