当前位置:  数据库>oracle

Oracle 闰年判断

    来源: 互联网  发布时间:2017-04-03

    本文导语: //闰年最直接的判断是:能被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); ...

//闰年最直接的判断是:能被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_mod20) 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  
// 











































































































    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3