2012-02-28 73 views
4

我必须做一个“选择”,它返回数据库中日期类型的字段与当前日期之间的差异(以小时为单位)。我如何在oracle中执行此操作?如何获得两个日期之间的差异?

我试试这个:

select 24 * (to_date(sysdate, 'YYYY-MM-DD hh24:mi') 
     - to_date('2012-02-28 15:20', 'YYYY-MM-DD hh24:mi')) diff_hours 
    from dual; 

但没有奏效。

回答

10

错误是因为SYSDATE已经是日期,所以不需要使用TO_DATE()将其转换为日期。

如果不将其转换为一个日期:

select 
    24 * (sysdate - to_date('2012-02-28 15:20', 'YYYY-MM-DD hh24:mi')) as diff_hours 
from dual; 

如果日期的格式是错误的,你可以使用可能两个步骤,如:

select 
    24 * (to_date(to_char(sysdate, 'YYYY-MM-DD hh24:mi'), 'YYYY-MM-DD hh24:mi') - to_date('2012-02-28 15:20', 'YYYY-MM-DD hh24:mi')) as diff_hours 
from dual; 
0
select trunc((sysdate - to_date('2012-02-28 15:20', 'YYYY-MM-DD hh24:mi'))/24) 
    from dual; 
+0

当在Oracle中减去两个不同的日期,则每天返回1,并且每小时返回1/24 – 2012-02-28 19:54:31

+0

您应该乘以24以获得日期差异的小时数。 – 2017-04-19 15:14:28