web-dev-qa-db-ja.com

SQL:特定の日付の時間範囲で作成されたレコードを取得します

先週作成された一連のレコードがあり、それらから6時45分から19時15分までに作成されたレコードのみを取得したいと思います。列がありますcreation_date私が使用できる。

SQLでこれを行うにはどうすればよいですか?

10
Mouna Cheikhna

Oracleでは、日付を数値に変換し、さまざまな方法でそれらに算術を適用できます。

たとえば、_sysdate-7_は7日前の日付を示します。 trunc(some_date)は、日付列から時間要素を削除します。そして、to_char(some_date, 'SSSSS')は、真夜中からの秒数として時間要素を提供します。したがって、06:45:00は24300秒、18:15:59は69359秒です(これらの番号は封筒の裏側にあるため、確認してください)。

とにかく、このような単一のクエリにすべてをまとめると...

_select *
from your_table
where creation_date >= trunc(sysdate)-7
and to_number(to_char(creation_date, 'sssss')) between 24300 and 69359
_

...コア時間内の時間要素を使用して、先週作成されたすべてのレコードを生成します。

15
APC

このクエリは、過去7日間に作成されたレコードを返し、作成日の時間部分は午前6時45分から午後7時15分までです。

select * 
  from your_table
 where creation_date > sysdate - 7
   and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
   and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00' 
3
Doug Porter

上記の基準に基づいて、これにより、先週の日曜日から土曜日の06:45:00と19:15:59の時間のレコードが返されます。

週の範囲を変えたい場合(たとえば、週が月曜日から日曜日の場合)、「-7」と「+6」を異なる数値に調整できます。

select * 
from your_table
where creation_date >= TRUNC(SYSDATE, 'WW') - 7
and creation_date <= (TRUNC(SYSDATE, 'WW') - 7) + 6
and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00'
0
Zack Macomber