タイムスタンプ演算の結果は、INTERVALデータ型です。そこに2番目の間隔の日があります...
1つの方法で分数が必要な場合は、EXTRACT()
を使用します。 、例:
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 )
または、日付を使ってトリックを使用することもできます:
select sysdate + (interval_difference * 1440) - sysdate
from (select systimestamp - (systimestamp - 1) as interval_difference
from dual )
「トリック」バージョンは、演算子の優先順位と、日付とタイムスタンプの算術の違いのために機能します。
最初の操作は次のようになります:
date + ( interval * number ) - date
ドキュメントに記載されているように:
Oracleは、括弧内の式を評価してから、外側の式を評価します。
したがって、最初の操作は、間隔に1,440を掛けるためにそれを実行しました。間隔、つまり離散期間に数値を掛けたものは、別の離散期間です。日時と区間演算に関するドキュメントを参照してください。したがって、この操作の結果は間隔になり、次のようになります。
date + interval - date
ここでは、プラス演算子がマイナスよりも優先されます。これは、間隔から日付を引いたものが無効な操作であることが原因である可能性がありますが、ドキュメントには、これが当てはまることが示されています(出てこないでください)。したがって、最初に実行される操作は日付+間隔です。日付と間隔は日付です。そのままにしておく
date - date
ドキュメントによると、これは日数を表す整数になります。ただし、元の間隔に1,440を掛けたため、これは、そうでない場合の日数の1,440倍になります。その後、秒数が残ります。
注目に値する:
間隔の計算で日時の値が返される場合、結果は実際の日時の値である必要があります。そうでない場合、データベースはエラーを返します。たとえば、次の2つのステートメントはエラーを返します。
「トリック」メソッドは 失敗することはめったにありませんが、それでも失敗します。いつものように、それを適切に行うのが最善です。