???? 今天看到了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