2013-09-27 67 views
0

我試圖獲取範圍內的日期列表,類似於PostgreSQL中的NOW()命令,唯一區別是now(),僅返回當前日期。從單個查詢中返回指定範圍內的日期

如果我執行它,如下所示我獲得:

select now(); 

2013-09-27 15:27:50.303-05 

或者通過例如,我可以這樣做:

select now() - interval '1' day; 

,其結果是昨天

2013-09-27 15:27:50.303-05 

我需要的是一個查詢,可以返回一個給定範圍內的每個日期的列表,所以如果我提供2013-09-20和2013-09-27(我也不是真的我有興趣的時間,只有日期)我想獲得輸出如下:

2013-09-20 
2013-09-21 
2013-09-22 
2013-09-23 
2013-09-24 
2013-09-25 
2013-09-26 
2013-09-27 

有關如何實現此目的的任何想法? 通過偏好不使用存儲過程或函數,除非有沒有其他辦法...

+0

這是什麼意思?只需現在在你的代碼中,然後在你的代碼而不是sql中創建列表。 – Eluvatar

+0

'generate_series((now() - '1 week :: interval):: date,now():: date)' – wildplasser

+0

@Eluvatar:一個可能的用例是一個外連接,能夠計算「aren」在那裏「 –

回答

4

使用generate_series(),不正是你需要:

SELECT generate_series('2013-09-20'::date 
        , '2013-09-27'::date 
        , interval '1 day')::date; 

帶兩個timestamp變量,但dates也被接受。
返回timestamp with time zone,所以我根據您的要求轉換爲date

更詳細的,但是從語法更清晰的版本是使用一套恢復功能(SRF)爲FROM項目:

SELECT * 
FROM generate_series('2013-09-20'::date 
        , '2013-09-27'::date 
        , interval '1 day')::date; 

考慮下面的評論。

+0

在select部分中使用set返回函數有點」不贊成「。最好只在'from'部分使用它們。 –

+0

@a_horse_with_no_name:已棄用?你會有一個來源嗎?我將提供一個相反的來源:'SELECT generate_subscripts('{NULL,1,NULL,2}':: int [],1)AS s;'.. [直接引用當前手冊](http: //www.postgresql.org/docs/current/interactive/functions-srf.html#FUNCTIONS-SRF-SUBSCRIPTS) –

+0

注意完全不贊成(這就是爲什麼我把它放在引號中) - 但至少沒有文檔。現在在郵件列表上討論這個「特徵」,例如,這裏:http://postgresql.1045698.n5.nabble.com/Set-returning-functions-in-the-SELECT-list-tp5732422p5732446.html(這是關於在選擇列表中有多個srf) –