在db2中,可以用字符串来表示日期时间类型,数据库系统会自动在内部把他们转换为日期时间类型;
但是在oracle中必须手工显示的使用to_date函数把字符串表示的日期时间进行转换才可以。
比如:
db2中: select days('2011-01-01')-days('2011-01-02') from sysibm.sysdummy1; --- -1
oracle中:select to_char(to_date('2011-01-01','yyyy-mm-dd')-1,'yyyy-mm-dd') from dual; --- 2010-12-31
oracle中的日期函数如下:
Oracle中可以直接使用加号“+”来进行日期的加法运算,其计算单位为“天”,比如date+3
就表示在日期date的基础上增加三天;同理使用减号“-”则可以用来计算日期前的特定时间
段的时间,比如date-3就表示在日期date的三天前的日期。
例子如下:
select to_char(to_date('2011-01-04','yyyy-mm-dd')-3,'yyyy-mm-dd'),to_char(to_date('2011-01-04','yyyy-mm-dd')+3,'yyyy-mm-dd') from dual;
---------------------------------------
2011-01-01 2011-01-07
同时如果在oracle中建立了一个表,其中某一列比如today定义为date型了,那么在想表中的today字段插入数据的时候,就只能使用to_date(日期字符串,'yyyy-mm-dd')来向
字段中插入数据,否则oracle会报错。而对于db2来讲,可以直接插入('2011-01-01')之类的日期值,而不用做转换。
oracle可以使用换算的方式来进行以周、小时、分钟等为单位的日期加减运算,比如下面的
SQL语句用于计算当前2小时10分钟后以及3周后的日期:
select sysdate from dual;
sysdate
---------------------------
2012/3/4 22:06:03
select sysdate+2/24+10/(60*24) date1,sysdate+3*7 date2 from dual;
date1 date2
-----------------------------------------------------------------
2012/3/5 0:16:03 2012/3/25 22:06:03
使用加减运算我们可以很容易的实现以周、天、小时、分钟、秒等为单位的日期的增减运
算,不过由于每个月的天数是不同的,也就是在天和月之间不存在固定的换算率,所以无法使用
加减运算实现以月为单位的计算,为此Oracle中提供了ADD_MONTHS()函数用于以月为单位的
日期增减运算,ADD_MONTHS()函数的参数格式如下:
ADD_MONTHS(date,number)
其中参数date为待计算的日期,参数number为要增加的月份数,如果number为负数则表
示进行日期的减运算。
举例如下:
select sysdate,add_months(sysdate,3) sysdate3,add_months(sysdate,-2) sysdate2 from dual;
sysdate sysdate3 sysdate2
------------------------------------------------------------------------------------------------------
2012/3/4 22:09:22 2012/6/4 22:09:22 2012/1/4 22:09:22
如下面的SQL语句用于计算当前日期两个月零10天后以及3个月零10个小时前的日期
时间:select sysdate,add_months(sysdate,2)+10 sysdate1,add_months(sysdate,-3)-10/24 sysdate2 from dual;
sysdate sysdate1 sysdate2
--------------------------------------------------------------------------------------------
2012/3/4 22:37:07 2012/5/14 22:37:07 2011/12/4 12:37:07