先週作成された一連のレコードがあり、それらから6時45分から19時15分までに作成されたレコードのみを取得したいと思います。列がありますcreation_date
私が使用できる。
SQLでこれを行うにはどうすればよいですか?
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
_
...コア時間内の時間要素を使用して、先週作成されたすべてのレコードを生成します。
このクエリは、過去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'
上記の基準に基づいて、これにより、先週の日曜日から土曜日の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'