获取日期范围内星期几的日期 [英] Get dates of a day of week in a date range

查看:89
本文介绍了获取日期范围内星期几的日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要PostgreSQL中的一个函数,该函数接受一个日期范围,并返回该日期范围内的日期,该日期范围是星期一.任何人都知道如何做到这一点?

I need a function in PostgreSQL that accepts a date range and returns the dates inside the date range that are Mondays. Anybody have an idea how this could be done?

推荐答案

最有效的方法应该是找到第一个星期一,并以7天为步长生成一系列:

The most efficient way should be to find the first Monday and generate a series in steps of 7 days:

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;

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆