0

2 つのタイムスタンプを取得しました。

いう:

21.10.2013 00:00:23

21.10.2013 00:00:00

タイムスタンプ 1 から 23 秒を秒に追加するにはどうすればよいですか。

私のクエリは、現時点では次のようなものです。

select count(1) 
from tbl where timestamp1 >= NVL((select MAX(TIMESTAMP2) + ("Seconds from TS 1") 
from tbl2), timestamp - 1);
4

2 に答える 2

4

試す:

timestamp2  + (extract (second from timestamp1)/86400) 
于 2013-11-06T14:31:48.923 に答える
2

別の方法として、最初のタイムスタンプから秒 (または分と秒、または全体の時間部分) をintervalとして取得し、それを 2 番目のタイムスタンプに追加することもできます。

このTRUNC(date)関数は、精度を決定するパラメーターを取ります。合格するとDD(デフォルト)、時間全体が削除されます。合格するHH24と、時間は保持されますが、分以下が削除されます。結果は日付ですが、タイムスタンプからそれを差し引くと、結果は次のようになります。間隔です(ドキュメントが言うように)。

このデモで作成された間隔を確認できます。

with t as (
  select to_timestamp('2013-11-06 09:10:11', 'YYYY-MM-DD HH24:MI:SS') as ts1
  from dual
)
select ts1,
  ts1 - trunc(ts1, 'MI') as second_interval,
  ts1 - trunc(ts1, 'HH24') as minute_interval,
  ts1 - trunc(ts1, 'DD') as hour_interval
from t;

TS1                     SECOND_INTERVAL MINUTE_INTERVAL HOUR_INTERVAL
----------------------- --------------- --------------- -------------
2013-11-06 09:10:11.000 0 0:0:11.0      0 0:10:11.0     0 9:10:11.0   

次に、間隔を他のタイムスタンプに追加できます。

with t as (
  select to_timestamp('2013-11-06 09:10:11', 'YYYY-MM-DD HH24:MI:SS') as ts1,
    to_timestamp('2013-10-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS') as ts2
  from dual
)
select ts2 + (ts1 - trunc(ts1, 'MI')) as ts2_second_adj,
  ts2 + (ts1 - trunc(ts1, 'HH24')) as ts2_minute_adj,
  ts2 + (ts1 - trunc(ts1, 'DD')) as ts2_hour_adj
from t;

TS2_SECOND_ADJ          TS2_MINUTE_ADJ          TS2_HOUR_ADJ          
----------------------- ----------------------- -----------------------
2013-10-31 00:00:11.000 2013-10-31 00:10:11.000 2013-10-31 09:10:11.000 

SQLフィドル

時間の一部以上を取得している場合、これは複数のextract呼び出しを行い、それらを正しい値 (秒の場合は 86400 など) で割るよりも少し簡単かもしれません。これにより、タイムスタンプの小数秒も保持されますが、これは望ましい場合とそうでない場合があります。

このアプローチは値にも機能しDATEますが、extractバージョンには機能しません。

于 2013-11-06T17:50:25.003 に答える