これは私の現在のOracleテーブルです。
次のような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
を日付に使用しないでください。ただし、DATE
とHOUR
を一緒に取得する方法がわからないため、他の機会を試すことはできません...ありがとう!
[〜#〜] 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
として日付に変換する必要があります。
そうですね、この方法でフィールド日付に時間を追加できます
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
(ちなみに、列名に予約済みキーワードを使用しないでください。ただし、これは単なるサンプルだと思います)。
min
をdate
に追加する場合は、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
SELECT *
FROM table
WHERE date BETWEEN start_date + NUMTODSINTERVAL( hour, 'HOUR' ) AND end_date + NUMTODSINTERVAL( hour, 'HOUR' )