DT_ID
が数値データ型の列で、この列に格納されている値の形式は、日付が'YYYYMMDD'
の次の問合せがあります。数値の変換は、oracleのパフォーマンスに影響します
私の下の質問では、毎週のレポートのために月曜日から日曜日まで先週のデータを取得したいと思っています。このクエリは非常に高速です。
select ID,NAME
from TEST_REPORT
where
DT_ID between 20170904 and 20170910;
しかし、これはハードコードされた日付であり、私はそれを動的にしたいと思います。
select ID,NAME
from TEST_REPORT
where
DT_ID>= next_day(trunc(sysdate), 'MONDAY') - 14 and
DT_ID< next_day(trunc(sysdate), 'MONDAY') - 7;
しかし、それは、このエラーを与える:私はこのクエリを試してみました
expecting Number and got date
それがパフォーマンスの問題の多くを結果のクエリ以下のように私が今までにこの番号を変換します。より良いパフォーマンスでダイナミックにする方法はありますか?
select ID,NAME
from TEST_REPORT
where
to_date(DT_ID,'YYYYMMDD') >= next_day(trunc(sysdate), 'MONDAY') - 14 and
(DT_ID,'YYYYMMDD') < next_day(trunc(sysdate), 'MONDAY') - 7;
は、テーブル定義を示してください、と列のデータ型、および例えば、テーブルデータ。ありがとう – OldProgrammer