两个时间相减默认的是天数
oracle 两个时间相减默认的是天数*24 为相差的小时数
oracle 两个时间相减默认的是天数*24*60 为相差的分钟数
oracle 两个时间相减默认的是天数*24*60*60 为相差的秒数
如下:
SQL>select sysdate from dual;
2008-2-20 14:32:35
SQL> select (sysdate-to_date('2008-02-17 23:00:00','yyyy-mm-dd hh24:mi:ss')) from dual;
SQL> select (sysdate-to_date('2008-02-17 23:00:00','yyyy-mm-dd hh24:mi:ss'))*24 from dual;
SQL> select (sysdate-to_date('2008-02-17 23:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from dual;
1、对于2个DATE类型直接相减,就可以得到天数的值,如:
select to_date('2006-05-11 12:30:01','YYYY-MM-DD HH24:MI:SS') -to_date('2006-05-11 12:30:00','YYYY-MM-DD HH24:MI:SS') T from dual;
结果:
T
-------------------
.000011574
这个得到的天数很容易换算成秒,如 0.000011574*24*60*60=1s。
2、在ORACLE里日期类型是可以直接进行比较的。举个例子 SQL> SELECT to_date('2006-12-05', 'yyyy-mm-dd') - to_date('2006-12-07', 'yyyy-mm-dd') FROM dual ;
这说明2006-12-05要比7号早2天。 SQL> SELECT to_date('2006-12-07 14:23:24' , 'yyyy-mm-dd hh24:mi:ss') + 1/24 FROM dual ;
这是说明在某一时间上加一小时,1是代表一天,1/24就是一小时,同理1/24/60就是一分钟
select trunc(sysdate) - trunc(to_date('2006-05-28 10:20','YYYY-MM-DD HH24:MI')) from dual
3、datediff在Oralce中的实现: create or replace function -- -- works in roughly the same way as sybase datsdiff -- call would be eg. datediff('month',date1,date2) -- p_what would be 'HOUR', 'DAY','MONTH' OR 'QUARTER' datediff( p_what in varchar2, p_d1 in date, p_d2 in date ) return number as l_result number; begin l_result:=; if (upper(p_what) = 'HOUR') then l_result:=((p_d2-p_d1)*24); end if; if (upper(p_what) = 'DAY') then l_result:=(p_d2-p_d1); end if; if (upper(p_what) = 'MONTH') then l_result:=round(MONTHS_BETWEEN(p_d2,p_d1),0); end if; if (upper(p_what) = 'QUARTER') then l_result:=((floor(MONTHS_BETWEEN(p_d2,TRUNC(p_d2,'YEAR'))/3)+1) - (floor(MONTHS_BETWEEN(p_d1,TRUNC(p_d1,'YEAR'))/3)+1) + (((to_char(p_d2, 'yyyy')) - (to_char(p_d1, 'yyyy')))*4)); end if; l_result:=floor(l_result); return l_result; end; / SQL> SELECT DATEDIFF('MONTH','11-JUL-1975','07-JUN-2004') FROM DUAL; DATEDIFF('MONTH','11-JUL-1975','07-JUN-2004') --------------------------------------------- 347