2016-11-28 91 views
-2

我想生成trunc('7/1/2014','mm/dd/yyyy')和trunc(sysdate-1)+0.99999(2014年7月1日起)之間​​的日期範圍直到昨天午夜)。每年生成日期範圍

請參閱預期結果(https://i.stack.imgur.com/UD4Ub.png

+0

你有什麼問題?你試過什麼了?目前沒有任何東西可以幫助您,但我會說您不想添加0.99999。只需使用兩個獨立的過濾器,您就不必做任何可怕的事情來顛覆BETWEEN的包容性。 –

+0

沒有附加圖片。 – mathguy

+0

我試圖添加預期的結果作爲圖像。但它不會被添加 – user661981

回答

0

事情是這樣的附加圖像。根據需要調整。你可能不會select * from ranges,但你會使用範圍在任何/無論你需要他們。從我的解決方案中的表input_date中選擇的輸入日期dt可能反而是您的應用程序中的綁定變量等。希望您能夠自己弄清楚調整情況;如果沒有,請回信。

with 
    input_date (dt) as (
     select to_date('07/01/2014', 'mm/dd/yyyy') 
     from dual 
    ), 
    ranges (date_from, date_to) as (
     select add_months(dt, 12 * (level - 1)) + level - 1, 
       least(trunc(sysdate), add_months(dt, 12 * level) + level - 1) 
     from input_date 
     connect by add_months(dt, 12 * (level - 1)) + level - 1 <= trunc(sysdate) 
    ) 
select * from ranges 
; 

DATE_FROM DATE_TO 
---------- ---------- 
07/01/2014 07/01/2015 
07/02/2015 07/02/2016 
07/03/2016 11/28/2016