2012-08-28 97 views
2

PostgreSQL中有沒有辦法一次查找一個日期塊的星期幾?我可以使用PostgreSQL的dow轉換

SELECT extract(dow from timestamp '2012-08-27') 

一次得到一天,但我想一次餵它一個月左右的數據。我在我的數據庫中創建了一個「日曆」表,其中有一列,日期,格式爲yyyy-MM-dd。

如果我想在9月的每一天運行這個提取,有沒有一個簡單的方法來做到這一點?我可以編寫一個函數並將開始日期和結束日期提供給它嗎?

+0

+1解釋你想要做什麼,包括你的PostgreSQL版本。 –

回答

3

,盡我所能,從你的描述猜測,這樣的:

SELECT the_date_column_name, extract(dow from the_date_column_name) 
FROM calendar 
WHERE date_trunc('month', the_date_column_name) = DATE '2012-09'; 

...或二叉樹的可轉位版本:

SELECT the_date_column_name, extract(dow from the_date_column_name) 
FROM calendar 
WHERE the_date_column_name BETWEEN DATE '2012-09-01' AND (DATE '2012-09-01' + INTERVAL '1' MONTH) - INTERVAL '1' DAY; 

應該做的工作。

如果您願意,可以使用>= DATE '2012-09-01'< DATE '2012-10-01'而不是BETWEEN;它避免了結束日期的混亂構造,並且工作原理相同。

要將其封裝在一個函數中,您需要計算出想要如何調用它以及如何首先返回結果。你想通過一個開始和結束日期範圍?表示當月的第一天的日期?什麼?你想如何返回結果?

順便說一句,如果您的專欄實際上按照您的描述建議名稱"date",請更改其名稱。 DATE是一個SQL關鍵字和類型名稱。在某些情況下,您可以將其用作用戶標識符,但這不是個好主意;選擇一個更好的名字。

+0

謝謝!這樣可行。對不起,這個東西有點新。我感謝您的幫助。 – pkracer

+0

@pkracer不用擔心。查看更新後的答案重新包裝它在一個函數中的問題......雖然我不得不問,爲什麼你需要這樣的查詢,封裝在函數中似乎不是很有用。 –

+0

嗯,我正試圖想出一個簡單的解決方案,以酒店價格查找週末收取不同費率。我需要一些方法來確定某一天的某一天是哪一天。現在我有一個room_rate表,例如,房間A有5個rate_ids(行)與之關聯。每個ID都有與之相關的開始日期,結束日期,工作日費率和週末費率。開始日期和結束日期幾個月。當用戶輸入日期進行搜索時,我需要數據庫根據星期幾來分配正確的費率。 – pkracer