有可能確定要使用和next_day組合定期日期計算的日期。下面的代碼應該是相當接近,但它是未經測試,可能無法在某些極端情況,但至少你得到的總體思路:)
where resolved_date >= next_day(trunc(sysdate) - interval '14' day, 'SUN')
and resolved_date < next_day(trunc(sysdate) - interval '7' day, 'SUN')
trunc(sysdate)
截斷日期天; 2011-04-19 23:32:34變成2011-04-19 00:00:00,即刪除時間組件。 next_day(sysdate, 'SUN')
返回下一個星期日。如果sysdate恰好是星期日,則返回下一個星期日。
重要:日期名稱必須與會話語言相同。
interval
東西只是從日期開始添加/減去不同時間單位的標準方式。
全部放在一起,爲2011年4月19日的邏輯將是:
- 截斷SYSDATE => 2011-04-19 0時零零分00秒
- 減法14天=> 2011- 04-05 00:00:00
- 查找下一個星期日=> 2011-04-10 00:00:00
...和
- 截斷SYSDATE => 2011-04-19 0時00分00秒
- 減法7天=> 2011-04-12 0時00分00秒
- 查找下一個星期日=> 2011-04-17 00: 00:00
..resulting在下面的查詢:
where resolved_date >= timestamp '2011-04-10 00:00:00'
and resolved_date < timestamp '2011-04-17 00:00:00'
所有resolved_dates所發生的或10的第一秒後:日,但17的第一秒前:日將被包括在內。請注意,>=
和<
不等於between
。
有關性能的說明:我會確保Oracle正確估計日期範圍爲7天,並且使用正確的連接順序/方法。如果您希望查詢運行一段時間,則可以計算應用程序中的日期,並將它們作爲日期文件提供,而不是像上面那樣在運行時進行計算。
即使它在我的環境中不起作用,我也接受了它,因爲它使我找到了正確的答案。 – 2011-06-14 01:05:52