【问题标题】:Oracle Date - How to add years to dateOracle 日期 - 如何将年份相加
【发布时间】:2012-03-07 23:11:41
【问题描述】:

我有一个日期字段

DATE = 10/10/2010

sum = 4(这是计算的年数)

有没有办法在 2010 年 10 月 10 日加上四年并成功 2014 年 10 月 10 日?

【问题讨论】:

    标签: oracle oracle10g date-arithmetic


    【解决方案1】:

    尝试添加月份(12 * 年数)。像这样-

    add_months(date'2010-10-10', 48)
    

    【讨论】:

      【解决方案2】:

      使用add_months

      例子:

      SELECT add_months( to_date('10-OCT-2010'), 48 ) FROM DUAL;
      

      警告
      add_months,如果您输入一个月的最后一天开始,则返回结果月份的最后一天。

      因此,add_months(to_date('28-feb-2011'),12) 将返回 29-feb-2012。

      【讨论】:

        【解决方案3】:

        我相信你可以使用ADD_MONTHS() 函数。 4 年是 48 个月,所以:

        add_months(DATE,48)
        

        以下是使用该功能的一些信息:

        http://www.techonthenet.com/oracle/functions/add_months.php

        http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1157035034361

        【讨论】:

          【解决方案4】:

          我不确定我是否正确理解了您的问题,但是

          select add_months(someDate, numberOfYears * 12) from dual
          

          可能会成功

          【讨论】:

          • 也适用于闰年。
          【解决方案5】:

          你可以试试这个:

          someDate + interval '4' year

          INTERVAL

          【讨论】:

          • 只是一个建议。避免使用 INTERVAL 数据类型。它符合 ANSI/ISO 标准。因此,您所写的声明在 2 月 29 日将不起作用。通常由您决定结果是否正确。而 add_months 是 Oracle 专有的,可以为案例生成有效日期。
          • @ibre5041 很抱歉从坟墓中提出这个帖子,但我正在寻找一种方法来做到这一点,而不是在计算生日时坚持到该月的最后一天,因为 add_month() 失败了 2 /28。当下一年是闰年时 add_months(to_date('02-28','MM-DD')) 返回 02-29,这是不正确的。我发现执行以下操作总是返回正确的日期:(to_date('02-28','MM-DD') - 1) + interval '1' year + 1 返回 02-28,即使下一年是闰年年,如果你输入 02-29,它将在非闰年返回 03-01。
          • @Bob 遗憾的是,select (to_date('01-31','mm-dd') -1 ) + interval '1' month +1 from dual; 总是与ORA-01839: date not valid for month specified 发生冲突。
          • 但是我们添加的是年,而不是月。
          【解决方案6】:

          除了 ADD_MONTHS 之外还有一个选项

          SELECT
                SYSDATE,
                SYSDATE
                + TO_YMINTERVAL ( '1-0' )
          FROM
                DUAL;
          
          
          SYSDATE   SYSDATE+TO_YMINTERVAL('1-0')
          --------- ----------------------------
          29-OCT-13 29-OCT-14                   
          1 row selected.
          
          
          SELECT
                SYSDATE,
                SYSDATE
                + TO_YMINTERVAL ( '2-0' )
          FROM
                DUAL;
          
          
          SYSDATE   SYSDATE+TO_YMINTERVAL('2-0')
          --------- ----------------------------
          29-OCT-13 29-OCT-15                   
          1 row selected.
          
          SELECT
                TO_DATE ( '29-FEB-2004',
                        'DD-MON-YYYY' )
                + TO_YMINTERVAL ( '1-0' )
          FROM
                DUAL
          
             *
          Error at line 4
          
          ORA-01839: date not valid for month specified
          

          但最后一个是非法的,因为 2005 年没有 2 月 29 日,因此它在闰年情况下(2 月 29 日)失败

          同样阅读documentation

          【讨论】:

            【解决方案7】:
                    SELECT TO_CHAR(SYSDATE,'YYYY')-2 ANO FROM DUAL
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-05-31
              • 2020-11-11
              • 2014-05-22
              • 2013-03-01
              相关资源
              最近更新 更多