平年闰年等日期判断,包含定义函数方式

一般的年份除以4,有余数的是平年,没有余数的是闰年,但如果是年份是整百的,那么该年份除以400,有余数的是平年,没有余数的是闰年。

JAVA算法如下:

PLSQL脚本方法如下:

平年年闰年判断1:(判断本年2月是否有29号;顺带本年第一天、月份+1、最后一天)

SELECT 
---截断函数TRUNC
TRUNC(SYSDATE,'YYYY') 本年第一天年月日
,ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),1) 本年2月第一天年月日
,LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),1)) as "本年2月最后一天"
,TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),1)),'DD') 本年2月最后一天日
,TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(to_date('20240331','yyyymmdd'),'YYYY'),1)),'DD') 指定日期当年2月
,CASE WHEN 
TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'YYYY'),1)),'DD')=29
THEN '闰年'
ELSE '平年'
END 
AS 平年闰年的判断
FROM DUAL

平年闰年判断2:(判断年份能被4整除并且不能被100整除  或者能被400整除)

select  cast(to_char(SYSDATE,'yyyy')as number) 当前年,
to_number(to_char(SYSDATE,'yyyy')) 当前年,
---能被4整除不能被100整除  或者  能被400整除
case when (mod((to_number(to_char(SYSDATE,'yyyy'))),4) = 0 and mod((to_number(to_char(SYSDATE,'yyyy'))),100) <> 0 )  
  or mod((to_number(to_char(SYSDATE,'yyyy'))),400) = 0
THEN '闰年'
ELSE '平年'
end 
AS 平年闰年的判断
from dual

定义函数:

Oracle自定义函数定义:
create/replace function 函数名 (参数名 输入输出类型 字段类型) return 字段类型 is
变量名 字段类型; --函数的内部变量,需要包含字段类型的长度
begin
主体;
return(变量名);
end 函数名;
观察到:
定义函数的参数和输出类型的时候不需要考虑字段类型的长度;
函数的内部变量需包含字段类型的长度;
函数可以没有输入输出参数,但一定要有返回(return)的数据类型,因此必须有内部变量存储return的数据;
函数的输入输出参数可以在主体中直接使用。
函数的执行:
--sqlplus
var 变量名 字段类型(包含长度);
exec :变量名:=函数名(参数的值,接收输出变量的变量名)
--developer
select 函数名(参数) from dual;

实例方法一:

--**************************************************************************--
-- ** 内容:根据输入的年份判读平年闰年
-- ** 判断方法:当年2月是否有29号
--**************************************************************************--
CREATE OR REPLACE FUNCTION ping_run_year (i_year in number )
       RETURN VARCHAR2   IS  --定义返回(输出)字符类型
       v_FLAG  varchar2(20); --定义输出(返回)变量       
BEGIN
     
     SELECT 
      CASE WHEN 
     TO_CHAR(LAST_DAY(ADD_MONTHS(to_date(concat(i_year,'0101'),'yyyymmdd'),1)),'DD')=29
     THEN '闰年'
     ELSE '平年'
     END  into v_FLAG
     FROM DUAL;

RETURN (v_FLAG);      --输出(返回)值,记得要括号。
END ;

执行函数结果:

实例方法2:

--**************************************************************************--
-- ** 内容:根据输入的年份判读平年闰年
-- ** 判断方法:判断年份能被4整除并且不能被100整除  或者能被400整除
--**************************************************************************--
CREATE OR REPLACE FUNCTION ping_run_year2 (i_year in number )
       RETURN VARCHAR2   IS  --定义返回(输出)字符类型
       v_FLAG  varchar2(20); --定义输出(返回)变量       
BEGIN
     
     select
     ---能被4整除不能被100整除  或者  能被400整除
     case when (mod(i_year,4) = 0 and mod(i_year,100) <> 0 )  
     or mod(i_year,400) = 0
     THEN '闰年'
     ELSE '平年'
     end  into v_FLAG
     FROM DUAL;

RETURN (v_FLAG);      --输出(返回)值,记得要括号。
END ;

执行函数结果:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值