2012-04-27 4 views
3

私は2つの日付を減算しようとしていて、浮動小数点値が返されることを期待しています。しかし、私はお返しになったことは以下の通りです:奇妙なデータを返すoracleのタイムスタンプを差し引く

+000000000 00:00:07.225000 

(私は2番目の違いを取得したい)、さらに奇妙な値が返されて、何か得ている86400で値を掛ける:任意の

+000000007 05:24:00.000000000 

をアイディア?私は型キャスティングと関係があると疑っています。

答えて

6

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

タイムスタンプを減算した結果がintervalであるのに対して、dateを減算した結果は、2つの日付の間の日数を表す数値です。

この

は、マニュアルに記載されて:あなたは今までに、あなたのタイムスタンプ列をキャストするとき
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

+0

ありがとう!私は月曜日にそれを試してみる。 –

+0

キャスト後の戻り値は2番目の値に切り上げられます。浮動小数点値の2つのタイムスタンプの違いを知るのに、より良い方法がありますか? –

+0

@ YouQi:どのようなデータ型が定義されているか? –

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 
+0

ある関数を作成することなく、どのような方法がありますか?私は特権を持っていないので、 –

+1

あなたは関数を必要としません、この文だけ:yourtableからの選択datediff( 'ss'、date1、date2)秒 – buzznfrog

+4

@buzznfrog - Tomはその記事に 'datediff'を作成します、標準のビルトイン関数です。とにかく 'date'算術に依存しているので、' timestamp'値のためにも働きません。 –

関連する問題