私は2つの日付を減算しようとしていて、浮動小数点値が返されることを期待しています。しかし、私はお返しになったことは以下の通りです:奇妙なデータを返すoracleのタイムスタンプを差し引く
+000000000 00:00:07.225000
(私は2番目の違いを取得したい)、さらに奇妙な値が返されて、何か得ている86400で値を掛ける:任意の
+000000007 05:24:00.000000000
をアイディア?私は型キャスティングと関係があると疑っています。
私は2つの日付を減算しようとしていて、浮動小数点値が返されることを期待しています。しかし、私はお返しになったことは以下の通りです:奇妙なデータを返すoracleのタイムスタンプを差し引く
+000000000 00:00:07.225000
(私は2番目の違いを取得したい)、さらに奇妙な値が返されて、何か得ている86400で値を掛ける:任意の
+000000007 05:24:00.000000000
をアイディア?私は型キャスティングと関係があると疑っています。
私はあなたの列がtimestamp
ではなくdate
として定義されていると思います。
タイムスタンプを減算した結果がinterval
であるのに対して、date
を減算した結果は、2つの日付の間の日数を表す数値です。
この
は、マニュアルに記載されて:あなたは今までに、あなたのタイムスタンプ列をキャストするときをので、あなたが期待するものを手に入れる必要があります。
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
この記事を読む: 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
ある関数を作成することなく、どのような方法がありますか?私は特権を持っていないので、 –
あなたは関数を必要としません、この文だけ:yourtableからの選択datediff( 'ss'、date1、date2)秒 – buzznfrog
@buzznfrog - Tomはその記事に 'datediff'を作成します、標準のビルトイン関数です。とにかく 'date'算術に依存しているので、' timestamp'値のためにも働きません。 –
ありがとう!私は月曜日にそれを試してみる。 –
キャスト後の戻り値は2番目の値に切り上げられます。浮動小数点値の2つのタイムスタンプの違いを知るのに、より良い方法がありますか? –
@ YouQi:どのようなデータ型が定義されているか? –