xiaoh08 发表于 2013-1-13 18:29:44

DB2中求两个日期之间相差多少个月?

DB2中怎么来求两个日期之间相差多少个月呢?
今天在工作中遇到一个问题,就是怎么在DB2中怎么来求两个日期之间相差多少个月呢?
结果找到一个方法如下:
在DB2中两个日期之间相减会等到一个整数总共有六种情况分别是:
select date('2010-1-30')-date('2010-1-1') from RATE_INFO;
查询结果是:29
29代表的意思是  29天

select date('2010-10-1')-date('2010-1-1') from RATE_INFO;
查询结果是:900
900代表的意思是  9个月0天

select date('2010-12-3')-date('2010-1-1') from RATE_INFO;
查询结果是:1102
1102代表的意思是  11个月2天

select date('2011-10-1')-date('2010-1-1') from RATE_INFO;
查询结果是:10900
10900代表的意思是  1年9个月0天

select date('2020-10-1')-date('2010-1-1') from RATE_INFO;
查询结果是:100900
100900代表的意思是  10年9个月0天
总结起来是: 个位、十位用来表示相差多少天
             百位、千位用来表示相差多少月
             万位、十万位用来表示相差多少年

我自己写了一个函数用来计算两个日期之间相差多少个月

-- 计算两个日期之间相差多少个月,如果有零星的天数,则加上一个月
create function monthBetween("DAY1" varchar(10),"DAY2" varchar(10))Returns INTEGER LANGUAGE SQLbegin ATOMIC Declare dMonth INTEGER;Declare date1 Date;Declare date2 Date;Declare a INTEGER;--我们这里将传入的day1,day2进行比较,将日期大的赋值给date1,反之赋值给date2if day1>day2 then set date1=Date(day1);set date2=Date(day2);else set date1=Date(day2);set date2=Date(day1);end if;set a = (date1-date2);ifmod(a,100)>0 then --如果有零星天,即天数大于零则月数加上1set dMonth=(date1-date2)/10000*12+ mod((a/100),100)+1;elseset dMonth=(date1-date2)/10000*12+mod((a/100),100);end if;return dMonth;end
   
  拿出来分享一下,希望对大家有所帮助
 
页: [1]
查看完整版本: DB2中求两个日期之间相差多少个月?