zoukankan      html  css  js  c++  java
  • 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秒。测试例子为:

        

    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

  • 相关阅读:
    JS替换字符
    sql 两个表字段叠加
    Qt实现窗口半透明显示
    Qt 设置窗口属性setWindowFlags函数
    ARM-Linux按键和旋钮控制
    飞凌开发板OK335xD烧写Linux镜像总结
    Qt QGraphics类应用——图片移动+选点缩放+控制移动区域
    Qt QGraphics类应用——地图缩放选点
    Ubuntu 同时使用有线和无线(有线连开发板,无限上网)
    Qt 自定义控件提升,头文件找不到的问题
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/13853358.html
Copyright © 2011-2022 走看看