2015-01-16 149 views

回答

9
SELECT current_date + cast(abs(extract(dow from current_date) - 7) + 1 as int); 

的工作,雖然可能有更優雅的方式來做到這一點。

總體思路是獲取當週的當天日期,dow,減去7,並採取絕對值,它會給你直到一週結束的天數,並加1,得到星期一。這給你下個星期一。

編輯:具有完全誤解的問題,以獲得前週一,簡單得多:

SELECT current_date - cast(extract(dow from current_date) as int) + 1; 

即減去當週從今天的日期(天的路徑週一的數量)當前日期和加一個,回到星期一。

+0

這給了即將到來的星期一日期。我怎樣才能得到最後一個星期一的日期? – Dezzie

3

我通常使用calendar table。有兩個主要優點。

  • 簡單。初級開發人員可以通過少量培訓正確查詢。
  • 明顯。正確的查詢是顯然正確。

假設「本週的星期一」是指今天的星期一,除非今天是星期一那麼。 。 。在手冊中

select date_trunc('week', current_date); 

更多細節:

select max(cal_date) as previous_monday 
from calendar 
where day_of_week = 'Mon' 
    and cal_date <= current_date; 
相關問題