Felet beror på att SYSDATE redan är ett datum, det finns ingen anledning att använda TO_DATE()
för att konvertera det till ett datum.
Om du inte konverterar det till ett datum:
select
24 * (sysdate - to_date('2012-02-28 15:20', 'YYYY-MM-DD hh24:mi')) as diff_hours
from dual;
Och om formateringen av datumen är fel kan du använda två steg som:
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;