Błąd jest spowodowany tym, że SYSDATE jest już datą, nie ma potrzeby używania TO_DATE()
przekonwertować go na datę.
Jeśli nie przekonwertujesz go na datę:
select
24 * (sysdate - to_date('2012-02-28 15:20', 'YYYY-MM-DD hh24:mi')) as diff_hours
from dual;
A jeśli formatowanie dat jest nieprawidłowe, możesz użyć dwóch kroków, takich jak:
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;