web-dev-qa-db-ja.com

時間のある2つの日付間のoracleクエリ

これは私の現在のOracleテーブルです。

  • 日付=日付
  • HOUR =数値
  • RUN_DURATION =数値

enter image description here

次のような2つの日付と時間の間のRUN_DURATIONを取得するクエリが必要です

Select * from Datatable where DATE BETWEEN to_date('myStartDate', 'dd/mm/yyyy hh24:mi:ss') + HOURS? and to_date('myEndDate', 'dd/mm/yyyy hh24:mi:ss') + HOURS?

たとえば、30.10.14 11:00:00から30.10.14 15:00:00までのすべてのデータ

私は時間を日付に合わせるためにこだわった。時間をmyStartDateに追加しようとしましたが、BETWEENのため、これは開始日に無視されます。 BETWEENを日付に使用しないでください。ただし、DATEHOURを一緒に取得する方法がわからないため、他の機会を試すことはできません...ありがとう!

5
Kᴀτᴢ

[〜#〜] date [〜#〜]には日付と時刻の両方の要素があります。今日までの時間を追加するには、いくつかの数学を行う必要があります。

例えば、

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> SELECT SYSDATE, SYSDATE + 1/24 FROM dual;

SYSDATE             SYSDATE+1/24
------------------- -------------------
2015-08-14 15:02:59 2015-08-14 16:02:59

Sysdateに1時間を追加します。したがって、日付データ型の列がある場合、日付に日数を追加するため、追加する時間数を24で割った値を追加するだけです。したがって、最初に時間数をhours/24として日付に変換する必要があります。

5
Lalit Kumar B

そうですね、この方法でフィールド日付に時間を追加できます

select "DATE" + (hour / 24) from <yourTable>

これにより、(最初のサンプルから、フォーマットによって異なる場合があります)

August, 14 2015 10:00:00 
August, 14 2015 08:00:00 

これに基づいて、必要なものを選択できます。

あなたの場合

where "DATE" + (hour / 24 )

これは

Select * 
from Datatable 
where "DATE" + (hour / 24 )
 BETWEEN to_date('30/10/2014 11:00:00', 'dd/mm/yyyy hh24:mi:ss')  and            
         to_date('30/10/2014 15:00:00', 'dd/mm/yyyy hh24:mi:ss') 

参照してください SqlFiddle

(ちなみに、列名に予約済みキーワードを使用しないでください。ただし、これは単なるサンプルだと思います)。

5

mindateに追加する場合は、intervalを使用できます。

select sysdate, sysdate + interval '1' hour from dual

そう、

Select * 
from Datatable 
where 
DATE BETWEEN myStartDate + interval to_char(HOURS) hour 
and myEndDate + interval to_char(HOURS) hour
1
Praveen
SELECT * 
FROM table 
WHERE date BETWEEN start_date +  NUMTODSINTERVAL( hour, 'HOUR' ) AND end_date +  NUMTODSINTERVAL( hour, 'HOUR' )