2012-03-05 13 views

答えて

12

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

たとえば、sysdate-7は7日前に日付を返します。 trunc(some_date)は、日付列から時間要素を削除します。 to_char(some_date, 'SSSSS')は、真夜中からの秒数としてtime要素を返します。だから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 

...コア時間内の時間要素と先週に作成されたすべてのレコードを作るウィル。

+0

+1、今週からの記録も戻しませんか? –

+1

「先週」にあいまいさがあります。私はそれを「過去7日間」という意味にしましたが、おそらくあなたは何か違うものを意味していました。 – APC

+0

ありがとう、私は欲しがったように働いています。「最後の7日間」は私が意味していたものです。 –

0

上記の基準に基づいて、これは、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

答えるためのおかげで、私は2012年2月27日 –

+0

@MMCのような特定のものではない、私のテーブルに異なる日付を持っている - そう、あなたはこれがダイナミックになりたいですか?同様に、あなたはそれを実行する日にかかわらず、7日間のレコードを取得するだけですか? –

+0

はい先週作成されたものですが、02/27/2012を今日の日付で置き換えた場合、昨日作成されたレコードの例は06:30になりません –

3

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

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' 
+0

+1、今週からレコードを戻すことはありませんか? –

関連する問題