db2计算日期所在月有多少天,日期所在季有多少天,年多少天函数

文章标题有点长,但是是希望能被大众用关键字搜索出来,之前在项目中因为要计算月平均值,季平均值,年平均值,那肯定少不了对时间的计算,发现网上db2的资料太少了,也没有找到我自己想要的东西,最后通过自己百度和思考,写出了三个函数分别用来计算日期所在月有多少天,日期所在季有多少天,年多少天函数,我用的数据库工具为dbVisualizer, 然后废话就不多说了,直接show SQL了。



计算传入的日期有多少天
--/
create function daysByDate(dateTime date)
return integer
specific daysByDate
language sql
not determinstic
reads sql data
static dispatch
called on null input
external action
inherit special registers
begin atomic
declare days1 integer;
declare monLastDay date;
declare monNextDay date;
set monLastDay = dateTime - day(dateTime) day;//计算上个月的最后一天
set monNextDay = dateTime + 1 month - day(dateTime) day;//计算这个月的最后 一天
set days1 = days(monNextDay) - days(monLastDay);
return days1;
end
/
计算传入时间所在的年的天数
--/
create function yearDayByDate(date1 date)
return integer
specific daysByDate
language sql
not determinstic
reads sql data
static dispatch
called on null input
external action
inherit special registers
begin atomic
days1 integer;
if(mod(year(date1),400) = 0 or (mod(year(date1),4) = 0 and mod(year(date1),100)<>0)) then//判断是否是闰年
set days1 = 366;
else
set days1 = 365;
end if;
return days1;
end
/
计算传入时间所在的季节天数
--/
create function quaterDaysByDate(date1 Date)
return integer
specific daysByDate
language sql
not determinstic
reads sql data
static dispatch
called on null input
external action
inherit special registers
begin atomic
declare 
days1 interger;
if(month(date1)>=1 and month(date1)<=3 ) then
if(yearDaysByDate(date1) = 366) then set days1 = 91;//此处调用了上面自定义函数y<span style="font-family: Arial, Helvetica, sans-serif;">earDaysByDate</span>
else set days1 = 90;
end if;
elseif (month(date1)>=4 and month(date1)<=9) then
elseif (month(date1)>=4 and month(date1)<=9) then
set days1 = 91;
elseif (month(date1)>=10 and month(date1) <= 12) then
set days1 = 92;
end if;
return days1;
end
/

上面SQL有几个要 注意的,在你执行的时候,注释不用加进去,然后为什么 要开始--/和末尾/,这个我自己也不知道,但是不加进去的话就会报错,然后SQL我是看着电脑屏手敲到我本地电脑的,因为公司电脑不能拉东西出来,所以不知道有没有把字打错,本电脑没装DB2,所以无法帮你们验证,所以如果执行错误,不要觉得用SQL没用,逻辑基本上都有了,如果觉得有用可以打赏一下,算对我的认可,钱多钱少无所谓,或者评论也可以,只想帮助更多人去解决遇到这种问题的朋友


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值