O resultado da aritmética de timestamp é um tipo de dados INTERVAL. Você tem um DIA DE INTERVALO A SEGUNDO aí...
Se você quiser o número de minutos, uma maneira seria usar
EXTRACT()
, por exemplo:select extract( minute from interval_difference ) * 60
+ extract( hour from interval_difference ) * 60
+ extract( day from interval_difference ) * 60 * 24
from ( select systimestamp - (systimestamp - 1) as interval_difference
from dual )
Alternativamente, você pode usar um truque com datas:
select sysdate + (interval_difference * 1440) - sysdate
from (select systimestamp - (systimestamp - 1) as interval_difference
from dual )
A versão "truque" funciona devido à ordem de precedência do operador e às diferenças entre a aritmética de data e hora.
Inicialmente a operação fica assim:
date + ( interval * number ) - date
Conforme mencionado na documentação:
O Oracle avalia as expressões dentro dos parênteses antes de avaliar as que estão fora.
Então, a primeira operação executou para multiplicar o intervalo por 1.440. Um intervalo, ou seja, um período de tempo discreto, multiplicado por um número é outro período de tempo discreto, consulte a documentação sobre data e hora e aritmética de intervalo. Assim, o resultado desta operação é um intervalo, deixando-nos com:
date + interval - date
O operador mais tem precedência sobre o menos aqui. A razão para isso pode ser que um intervalo menos uma data é uma operação inválida, mas a documentação também implica que esse é o caso (não diga isso). Assim, a primeira operação realizada é data + intervalo. Uma data mais um intervalo é uma data. Deixando apenas
date - date
De acordo com a documentação, isso resulta em um número inteiro representando o número de dias. No entanto, você multiplicou o intervalo original por 1.440, então isso agora representava 1.440 vezes a quantidade de dias que teria. Você fica então com o número de segundos.
Vale a pena notar que:
Quando os cálculos de intervalo retornam um valor de data e hora, o resultado deve ser um valor de data e hora real ou o banco de dados retorna um erro. Por exemplo, as próximas duas instruções retornam erros:
O método "truque" vai falhar, raramente, mas ainda falhará. Como sempre, é melhor fazê-lo corretamente.