我现在想把A段时间(格式为n年n月n天)和另B段时间(格式为n年n月n天)求和算出总长度(格式为n年n月n天)
有没有现成的方法?

解决方案 »

  1.   

    --测试数据
    CREATE VIEW V
    AS
    SELECT TO_DATE('1-12-20','YYYY-MM-DD') AS DT1,TO_DATE('3-10-24','YYYY-MM-DD') AS DT2 FROM DUAL;--执行语句
    SELECT add_months(add_months((dt1+to_char(dt2,'dd')),to_char(dt2,'mm')),3*12) from v;
    --结果
    0005-11-13
      

  2.   

    --如果是字符的情况
    --测试数据
    CREATE VIEW V
    AS
    SELECT '1-12-20' AS DT1,'3-10-24' AS DT2 FROM DUAL;
    --语句
    SELECT add_months(add_months((to_date(dt1,'yyyy-mm-dd')+to_char(to_date(dt2,'yyyy-mm-dd'),'dd')),
           to_char(to_date(dt2,'yyyy-mm-dd'),'mm')),3*12) from v;
    --结果
    0005-11-13
      

  3.   

    这个问题缺少一个先决条件:起始日期或截止日期。比如,一般我们这样说:今天离去年元旦1年11个月17天。而你这个问题只是*年*月*天,由于不同的起始日期或截止日期,这段时间的天数是不同的。因此两个存在都不确定的时间段,是没有办法加的。如果有起始日期可以这样做:
     总天数: days_amount = ((add_months(&begin_date1,&years1 * 12 + &months1) + &day1) - &begin_date1)
      + ((add_months(&begin_date2,&years2 * 12 + &months2) + &day2) - &begin_date2);
     要算出*年*月*天的格式需要写一个函数。