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里日期类型是可以直接进行比较的。举个例子
这说明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