L'erreur est que SYSDATE est déjà une date, il n'est pas nécessaire d'utiliser TO_DATE()
pour le convertir en date.
Si vous ne le convertissez pas en date :
select
24 * (sysdate - to_date('2012-02-28 15:20', 'YYYY-MM-DD hh24:mi')) as diff_hours
from dual;
Et si le formatage des dates est erroné, vous pouvez éventuellement utiliser deux étapes comme :
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;