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。
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');
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内置函数来增加小时、分钟和秒
? 使用NUMTODSINTERVAL内置函数来增加小时、分钟和秒
? 加一个简单的数来增加天
? 使用ADD_MONTHS内置函数来增加月和年
如select sysdate+numtodsinterval(3,'minute') from dual; 增加3分钟
select sysdate+3 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
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博客 ” ,链接:http://blog.itpub.net/24260552/viewspace-740636/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24260552/viewspace-740636/