Hello,
is there any standard function, or a concise solution based on set of
them, returning a set of dates included in a week of given year and
week number?
I ended up with creating my own function as in the example below, but I
am curious if I am not opening an open door.
Thanks
Irek.
CREATE OR REPLACE FUNCTION week2date(double precision, double
precision) RETURNS SETOF date
AS
$_$
SELECT day
FROM (
SELECT to_char(day, 'IYYY')::integer AS iyyy,
to_char(day, 'IW' )::integer AS iw,
day
FROM (
SELECT start + generate_series(0, n) AS day
FROM (
SELECT start,
(stop - start)::integer AS n
FROM (
SELECT (to_date($1::text, 'YYYY'::text) -
interval '3 days')::date AS start,
(to_date($1::text, 'YYYY'::text) + interval '1
year 3 days')::date AS stop
) ss
) aa
) bb
) cc
WHERE iw = $2 AND iyyy = $1
ORDER
BY day
$_$
LANGUAGE SQL
IMMUTABLE
;
SELECT week2date(date_part('year', now()), date_part('week', now()));
week2date
------------
2010-03-22
2010-03-23
2010-03-24
2010-03-25
2010-03-26
2010-03-27
2010-03-28
(7 rows)
SELECT week2date(2009, 53);
week2date
------------
2009-12-28
2009-12-29
2009-12-30
2009-12-31
2010-01-01
2010-01-02
2010-01-03
(7 rows)
SELECT week2date(2010, 1);
week2date
------------
2010-01-04
2010-01-05
2010-01-06
2010-01-07
2010-01-08
2010-01-09
2010-01-10
(7 rows)