今天看到了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。
个人认为还是自己写加上年,月之类的更简单。
转载自: