2012-01-04 39 views
27

我有一個books表和returned_date列。我希望看到過去一週發生的返回日期的所有書籍的結果。你如何找到過去一週發生的結果?

有什麼想法?我試着做一些日期數學,但Postgres對我的嘗試並不滿意。

回答

41

你想用intervalcurrent_date

select * from books where returned_date > current_date - interval '7 days' 

這從過去一週返回數據包括今天

Here's more在Postgres中使用日期。

+5

這實際上檢索8天,包括當天,而不是7。 – 2012-01-24 00:43:18

+0

良好的捕獲。編輯它以反映這一點。 – yiwei 2015-06-02 22:51:43

31
簡單且正確

摘自:

SELECT * FROM books WHERE returned_date > now()::date - 7 
  • now()::date is the Postgres implementation of standard SQL CURRENT_DATE。兩者在PostgreSQL中完全相同。只是示範。

  • now()::date - 7的工作原理是可以從/到date減去/添加integer值(=天數)。像7這樣的未加引號的數字是默認爲integer的數字文字,它只包含數字和可選的前導符號,因此不需要顯式轉換。

    您也可以使用interval進行操作,但對於date這更簡單快捷。與data type timestamp,你將不得不添加/減去interval,就像@Eric演示。

  • 該計算獨立於實際數據類型returned_date,操作符右側的結果類型將被強制匹配,以便以任何方式匹配(並且如果未註冊,則會引發錯誤)。

  • 對於 「過去一週」:
    包括今天使其> current_date - 7>= current_date - 6
    今天排除使它BETWEEN current_date - 7 AND current_date - 1(或類似)。 >= current_date - 7作爲其他答案建議返回行最後8天而不是7嚴格來說是錯誤的。