pl sql 判斷閏年

2021-09-01 01:44:38 字數 1780 閱讀 1183

這是乙個老調重彈的例子,也許以前寫過這樣的筆記,這裡再貼出來,是再次感嘆於其解決方法的美妙行。

判斷乙個年份是閏年,常見的想法是判斷其是否可被4整除,如果是100的倍數,要求其能被400整除。

下面是摘自dba_village的例子:

create or replace function is_leap_year (nyear in number) return boolean

is v_remainder1 number(5,2);

v_remainder2 number(5,2);

v_remainder3 number(5,2);

begin

v_remainder1 := mod(nyear,4);

v_remainder2 := mod(nyear,100);

v_remainder3 := mod(nyear,400);

if ((v_remainder1 = 0 and v_remainder2 <> 0 ) or v_remainder3 = 0) then

dbms_output.put_line(nyear || ' is a leap year');

return true;

else

dbms_output.put_line (nyear || ' is not a leap year');

return false;

end if;

end;

實際上,我們判斷乙個年份是否是閏年,主要是2月29號這個日期,如果反過來,如果該年存在這麼一天,那麼不就是閏年了? ,例子:

sql> create or replace function is_leap_year(nyear number) return number

2   is

3  4   v_test_date varchar2(8) ;

5   v_date   date ;

6   begin

7    v_test_date := to_char(nyear)||'0229';

8   

9    begin

10     v_date := to_date(v_test_date, 'yyyymmdd') ;

11     return 1 ;

12    exception

13     when others then

14      return 0 ;

15    end ;

16   end ;

17   /    

function created.

sql>

sql> show error

no errors.

sql>  

sql> select is_leap_year(2000)   from dual ;

is_leap_year(2000)

------------------

1sql> select is_leap_year(2001)   from dual ;

is_leap_year(2001)

------------------

0sql> select is_leap_year(1900)   from dual ;

is_leap_year(1900)

------------------

0當然,這個方法不是我原創的,但其抓住問題的本質的解決方法的確令人佩服,所以解決任何問題之前,必須首先了解問題的真正含義,不要為解決問題而解決問題。

oracle 閏年判斷

閏年最直接的判斷是 能被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...

判斷閏年(七)

閏年的乙個基本規則是 四年一閏,百年不閏,四百年再閏。通俗一點就是 能夠被4整除,但同時不能被100整除卻能被400整除的年份就叫閏年。這裡面最關鍵的一句 就是 if year 4 0 year 100 0 year 400 0 示例 include include using namespace ...

2883 閏年判斷

time limit 1 sec memory limit 128 mb submit 124 solved 68 submit status web board 定義乙個函式leapyear,函式宣告如下 int leapyear int n 函式宣告,如果引數n是閏年返回1,不是閏年返回0 在下...