這是乙個老調重彈的例子,也許以前寫過這樣的筆記,這裡再貼出來,是再次感嘆於其解決方法的美妙行。
判斷乙個年份是閏年,常見的想法是判斷其是否可被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 在下...