Oracle函数numtodsinterval和numtoyminterval简记

     今天看到了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秒。测试例子为:

    

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

    结果为:

   

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


 

select to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') init_day,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
       numtodsinterval(31, 'day') as add_day,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
       numtodsinterval(31, 'hour') as add_hour,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
       numtodsinterval(31, 'minute') as add_minute,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
       numtodsinterval(31, 'second') as add_second
  from dual;

    结果为:

    

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

select to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') init_day,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') + 31 as add_day,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') + 31 * 1 / 24 as add_hour,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') + 31 * 1 / 1440 as add_minute,
       to_date('2013-2-28 12:32:40', 'yyyy-mm-dd hh:mi:ss') +
       31 * 1 / 86400 as add_second
  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

    测试例子:

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

   

 

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

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

    结果为:

 

   

    改写例子:

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

    结果为:

   

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

 

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

 

     全文完。

猜你喜欢

转载自53873039oycg.iteye.com/blog/2029985
今日推荐