4

2 つの日付を減算しようとしていますが、いくつかの浮動小数点値が返されることを期待しています。しかし、私が見返りに得たものは次のとおりです。

+000000000 00:00:07.225000

値に 86400 を掛けると (差を秒で取得したい)、さらに奇妙な値が返されます。

+000000007 05:24:00.000000000

何か案が?型キャストと関係があるのではないかと疑っています。

4

2 に答える 2

7

timestampあなたの列はではなくとして定義されていると思いますdate

タイムスタンプを減算intervalした結果は、列を減算した結果はdate2 つの日付間の日数を表す数値になります。

これはマニュアルに記載されています:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

したがって、タイムスタンプ列を日付にキャストすると、期待どおりの結果が得られるはずです。

with dates as (
   select timestamp '2012-04-27 09:00:00' as col1,
          timestamp '2012-04-26 17:35:00' as col2
   from dual
)
select col1 - col2 as ts_difference,
       cast(col1 as date) - cast(col2 as date) as dt_difference
from dates;

編集

間隔を秒数(数値として)などに変換したい場合は、次のようにすることができます。

with dates as (
   select timestamp '2012-04-27 09:00:00.1234' as col1,
          timestamp '2012-04-26 17:35:00.5432' as col2
   from dual
)
select col1 - col2 as ts_difference,
       extract(hour from (col1 - col2)) * 3600 +  
       extract(minute from (col1 - col2)) * 60 + 
       (extract(second from (col1 - col2)) * 1000) / 1000 as seconds
from dates;

上記の結果は、55499.5802

于 2012-04-27T09:51:50.147 に答える
0

この記事を読む: http ://asktom.oracle.com/pls/asktom/ASKTOM.download_file?p_file = 6551242712657900129

例:

create table yourtable(
date1 date, 
date2 date
)
SQL> select datediff( 'ss', date1, date2 ) seconds from yourtable

   SECONDS 
---------- 
   6269539
于 2012-04-27T09:29:25.410 に答える