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;//此处调用了上面自定义函数yearDaysByDate
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没用,逻辑基本上都有了,如果觉得有用可以打赏一下,算对我的认可,钱多钱少无所谓,或者评论也可以,只想帮助更多人去解决遇到这种问题的朋友

db2计算日期所在月有多少天,日期所在季有多少天,年多少天函数_第1张图片

你可能感兴趣的:(数据库)