我需要PostgreSQL中的一個函數來接受日期範圍並返回星期一內日期範圍內的日期。任何人都有一個想法如何做到這一點?獲取日期範圍內的一週中的某一天的日期
1
A
回答
2
最有效的方法應該是找到的第一個星期一,併產生7天的步驟系列:
CREATE OR REPLACE FUNCTION f_mondays(dr daterange)
RETURNS TABLE (day date) AS
$func$
SELECT generate_series(a + (8 - EXTRACT(ISODOW FROM a)::int) % 7
, z
, interval '7 days')::date
FROM (
SELECT CASE WHEN lower_inc(dr) THEN lower(dr) ELSE lower(dr) + 1 END AS a
, CASE WHEN upper_inc(dr) THEN upper(dr) ELSE upper(dr) - 1 END AS z
) sub
$func$ LANGUAGE sql;
子查詢提取物開始(
a
)和結束(z
)的範圍內進行調整以適用於包含式和專有範圍with range functions.表達式
(8 - EXTRACT(ISODOW FROM a)::int) % 7
返回到下一個星期一的天數。如果已經是星期一,則爲0
。 The manual aboutEXTRACT().
generate_series()
可以迭代任何給定的時間間隔 - 在這種情況下爲7天。結果是timestamp
,所以我們投到date
。僅生成範圍內的星期一,不需要
WHERE
條款。
電話:
SELECT day FROM f_mondays('[2014-04-14,2014-05-02)'::daterange);
返回:
day
----------
2014-04-14
2014-04-21
2014-04-28
2
create function f(dr daterange)
returns setof date as $$
select d::date
from generate_series(
lower(dr), upper(dr), interval '1 day'
) s (d)
where
extract(dow from d) = 1 and
d::date <@ dr;
;
$$ language sql;
select f(daterange('2014-01-01', '2014-01-20'));
f
------------
2014-01-06
2014-01-13
相關問題
- 1. 計算一週中某天的日期
- 2. Oracle中的日期格式 - 獲取某個範圍的日期
- 3. 獲取昨天的日期,如果星期一得到週末範圍
- 4. 獲取星期日期範圍內的天數,JavaScript的
- 5. 在JavaScript中獲取某一天的下週日期
- 6. 計數的日期範圍內有多少天是另一個日期範圍
- 7. 我如何獲得日期範圍內的週末天數
- 8. 按月獲取日期的範圍之間的日期範圍
- 9. php函數獲取日期範圍內的所有星期一
- 10. 從單一的日期獲取日期範圍
- 11. 獲取日期範圍內的季節
- 12. 獲取月份日期範圍的日期範圍
- 13. SQL Server:獲取一個月的第一週和第二週的日期範圍
- 14. 範圍日期,直到日期+周
- 15. 日期範圍內的天數
- 16. 計算日期範圍內的天數
- 17. jQuery日期範圍內的天數
- 18. 計算日期範圍內的天數
- 19. 在另一個日期範圍內總結日期範圍
- 20. 如何從mysql的日期範圍內的一週中獲取特定日期的計數?
- 21. SQL - 支付週期的日期範圍
- 22. 日期範圍內的打印日期
- 23. 日期範圍內的VLOOKUP日期
- 24. 如何獲取給定日期範圍內的日期列表?
- 25. Lubridate獲取某月某天的日期
- 26. 獲取在2周範圍內的所有日期
- 27. 分組日期列在一週範圍
- 28. PHP日期時間:獲取日期基於月,周和一週的日期
- 29. 查看日期範圍與某些其他日期範圍的缺失日期
- 30. 日期範圍的日期範圍之間的任何日期
尼斯和簡單。一個小小的抱怨:當使用'daterange'包含/獨佔邊框時應遵守。 –