我有一個books
表和returned_date
列。我希望看到過去一週發生的返回日期的所有書籍的結果。你如何找到過去一週發生的結果?
有什麼想法?我試着做一些日期數學,但Postgres對我的嘗試並不滿意。
我有一個books
表和returned_date
列。我希望看到過去一週發生的返回日期的所有書籍的結果。你如何找到過去一週發生的結果?
有什麼想法?我試着做一些日期數學,但Postgres對我的嘗試並不滿意。
你想用interval
和current_date
:
select * from books where returned_date > current_date - interval '7 days'
這從過去一週返回數據包括今天。
Here's more在Postgres中使用日期。
你試過什麼數學?
這應該工作
select * from books where current_date - integer '7'
摘自:
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嚴格來說是錯誤的。
這實際上檢索8天,包括當天,而不是7。 – 2012-01-24 00:43:18
良好的捕獲。編輯它以反映這一點。 – yiwei 2015-06-02 22:51:43