我需要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'包含/独占边框时应遵守。 –