Oracle数据库两个日期相减
2013-09-25 21:27
190 查看
两个时间相减默认的是天数
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 ;
TO_DATE('2006-12-05','YYYY-MM-DD')-TO_DATE('2006-12-07','YYYY-MM-DD')
---------------------------------------------------------------------
-2
这说明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 ;
TO_DATE('2006-12-07
-------------------
2006-12-07 15:23:24
SQL>
这是说明在某一时间上加一小时,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
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 ;
TO_DATE('2006-12-05','YYYY-MM-DD')-TO_DATE('2006-12-07','YYYY-MM-DD')
---------------------------------------------------------------------
-2
这说明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 ;
TO_DATE('2006-12-07
-------------------
2006-12-07 15:23:24
SQL>
这是说明在某一时间上加一小时,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
相关文章推荐
- Oracle数据库两个日期相减
- javascript 两个日期相减
- mysql设置两个日期格式相减的方式
- js中将两个日期字符串相减 获得天数
- (转)如何获得两个日期相减的天数?
- SQLServer 中如何处理两个日期相减得到天数
- javascript 两个日期相减
- oracle 两个日期相减,返回天-时-分-秒的函数
- js两个日期相减
- mysql 中两个日期相减获得 天 小时 分钟 或者 小时:分钟的格式
- 两个日期对象--可相减
- 两个日期相减 取得天数
- 日期字符串转换 and 两个日期相减
- 在SQLserver中如何获得两个日期相减的天数?
- JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)
- PHP--两个字符串日期相减得到日时分秒
- mysql两个日期相减得到秒、分、天
- 时间日期转换+两个日期相减
- C# 两个日期相减得到月数和天数和时and计算 日期减去月之后的日期
- JavaScript中两个日期相减