今天看到了numtodsinterval这个函数,以前没见过,搜索了解了下,内容如下:

 

     (一)numtodsinterval函数:

     numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串(CHAR,VARCHAR2,NCHAR,NVARCHAR2),表明x的单位,常用的单位有 ('day','hour','minute','second')。

     参考了链接:

     http://dugu61888.blog.51cto.com/2947208/1091376

     官方文档链接:

     http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions103.htm

     官方文档显示numtodsinterval和numtoyminterval都是oracle 10g r2及以上版本的函数。

  

     简单的说numtodsinterval就是用来给时间类型加上n 天,n时, n分,或者n秒。测试例子为:

    

  1.  
    select sysdate,
  2.  
    sysdate + numtodsinterval(3, 'day') as num_value,
  3.  
    to_char(sysdate + numtodsinterval(3, 'day'), 'yyyy-mm-mm') char_val
  4.  
    from dual;

 

    结果为:

    

    知道了函数是干什么的,就可以写个类似的。测试例子如下: 


 

  1.  
    select to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') init_day,
  2.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
  3.  
    numtodsinterval(31, 'day') as add_day,
  4.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
  5.  
    numtodsinterval(31, 'hour') as add_hour,
  6.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
  7.  
    numtodsinterval(31, 'minute') as add_minute,
  8.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
  9.  
    numtodsinterval(31, 'second') as add_second
  10.  
    from dual;

 

    结果为:

 

    

     使用+1(天)类似写法为:

 

  1.  
    select to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') init_day,
  2.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') + 31 as add_day,
  3.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') + 31 * 1 / 24 as add_hour,
  4.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') + 31 * 1 / 1440 as add_minute,
  5.  
    to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
  6.  
    31 * 1 / 86400 as add_second
  7.  
    from dual;

 

    结果为:


    对比结果,完全相同。

 

    结论:个人认为,还是+1(天)这种写法更简单,更方便。

 

    (二)numtoyminterval 函数:

 

    numtoyminterval(x,c)将x转为interval year to month数据类型,常用的单位有'year','month'。

 

    参考了链接:

 

    http://407882.blog.51cto.com/397882/95353

 

    官方文档链接:

 

    http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions104.htm

    测试例子:

 

  1.  
    select sysdate,
  2.  
    sysdate + numtoyminterval(3, 'year') as date_value,
  3.  
    to_char(sysdate + numtoyminterval(3, 'year'), 'yyyy-mm-mm') char_val
  4.  
    from dual;

    

 

    numtoyminterval说白了就是给时间加上几年,几个月,对比测试例子:

 

  1.  
    select to_date('2013-02-28', 'yyyy-mm-dd') + numtoyminterval(1, 'year') add_year,
  2.  
    to_date('2013-02-28', 'yyyy-mm-dd') + numtoyminterval(1, 'month') add_month
  3.  
    from dual

    结果为:

 

   

    改写例子:

 

  1.  
    select add_months(to_date('2013-02-28', 'yyyy-mm-dd'), 12) add_year,
  2.  
    add_months(to_date('2013-02-28', 'yyyy-mm-dd'), 1) add_month
  3.  
    from dual

 

    结果为:

 

    

    对比后发现numtoyminterval加一个月后为2013-03-28,add_months为2013-03-31。

 

    个人认为还是自己写加上年,月之类的更简单。

 

转载自:

https://blog.csdn.net/oy538730875/article/details/84536379

 posted on 2020-10-21 16:56  xibuhaohao  阅读(1304)  评论(0编辑  收藏  举报