Have a look at this simpler non looping version of week_start()


That is a nice idea. I had to modify it a bit in order to get the same answers as my other function ...

CREATE or REPLACE FUNCTION week_start2(integer, integer) RETURNS date AS '
   DECLARE
       pyear ALIAS FOR $1;
       pweek ALIAS FOR $2;

       year_start date;
       year_start_dow integer;
       week_interval interval;
       week_date date;
       week_year integer;
       dow_interval interval;

   BEGIN
       IF pweek < 1 THEN
           RAISE EXCEPTION ''No week numbers less than 1'';
       END IF;
       IF pweek > 53 THEN
           RAISE EXCEPTION ''No week numbers over 53'';
       END IF;

       year_start := to_date(pyear, ''yyyy'');
       year_start_dow := date_part(''dow'', year_start);
       week_interval := pweek-1 || '' week'';
       dow_interval := year_start_dow || '' day'';
       week_date := year_start - year_start_dow + 1 + week_interval;
       week_year := extract(year FROM week_date);

       IF week_year > pyear THEN
           RAISE EXCEPTION ''No week 53 in this year'';
       END IF;

   RETURN week_date;
   END;
' LANGUAGE 'plpgsql';

_________________________________________________________________
Protect your PC - get McAfee.com VirusScan Online http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963



---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster

Reply via email to