日期:2014-05-16  浏览次数:20465 次

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(天)这种写法更简单,更方便。

?

??? (二)numto