ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Date Caculation

Oracle Date Caculation

原创 Linux操作系统 作者:taimoslong 时间:2012-08-10 14:03:13 0 删除 编辑
1.查询条件中
      1.Where to_char(date_column,'yyyy') = '2005'
      2.Where trunc(date_column,'y') = to_date('01-jan-2005','dd-mon-yyyy')
后者不仅有更出色的表现,而且占有的资源更少。与使用TRUNC相比,使用TO_CHAR所用的CPU时间与前者相差一个数量级。这是因为TO_CHAR必须把日期转换为一个串,这要使用一个更大的代码路径,并利用当前的所有NLS来完成这个工作。然后必须执行一个串与串的比较。另一方面,TRUNC只需把后5个字节设置为1.然后将两个7字节的二进制数进行比较,就大功告成了。因此,如果只是要截断一个DATE列,你将应该避免使用TO_CHAR。
另外,如果date_column列上有索引,应写成下面的方式才能用到索引。
     3.select count(*) from t
        where date_column>= to_date('01-jan-2005','dd-mon-yyyy')
        and date_column< to_date('01-jan-2006','dd-mon-yyyy');
 
2.使用Oracle DATE类型时:
􀂉 使用NUMTODSINTERVAL内置函数来增加小时、分钟和秒
􀂉 加一个简单的数来增加天
􀂉 使用ADD_MONTHS内置函数来增加月和年
如select sysdate+numtodsinterval(3,'minute') from dual; 增加3分钟
select sysdate+3 from dual;增加3天
select add_months(to_date('2012-01-30 12:12:12','yyyy-mm-dd hh24:mi:ss'),1) from dual;增加1个月。
 
不要使用NUMTOYMINTERVAL函数,得到的日期并不是下一个月的最后一天,而只是下一个月的同一天
如SQL> select to_date('2012-01-30 12:12:12','yyyy-mm-dd hh24:mi:ss')+numtoyminterval(1,'month') from dual;
select to_date('2012-01-30 12:12:12','yyyy-mm-dd hh24:mi:ss')+numtoyminterval(1,'month') from dual
                                                             *
ERROR at line 1:
ORA-01839: date not valid for month specified
下个月同一天是2012-02-30,它并不存在。
 
3.取当月第一天 select trunc(sysdate,'mm') from dual;
  取当年第一天 select trunc(sysdate,'yyyy') from dual;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24260552/viewspace-740636/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle字符集问题
请登录后发表评论 登录
全部评论

注册时间:2012-08-10

  • 博文量
    11
  • 访问量
    7467