Здравствуйте, Alex.

> Правнуки опубликуют результаты? ;о)

А что, прикольненько так получается...


EXECUTE BLOCK

RETURNS(BEGIN_DATE DATE,
        YEAR_DAY SMALLINT,
        WEEK_DAY SMALLINT,
        FN_WEEK SMALLINT,
        CURRENT_WEEK SMALLINT)
AS
  DECLARE VARIABLE END_DATE DATE;
BEGIN
  BEGIN_DATE   = '01.01.1001';
  END_DATE     = '31.12.2999';
  CURRENT_WEEK = 1;

  WHILE (BEGIN_DATE <= END_DATE) DO
  BEGIN
    YEAR_DAY = EXTRACT(YEARDAY FROM BEGIN_DATE);
    WEEK_DAY = EXTRACT(WEEKDAY FROM BEGIN_DATE);

    FN_WEEK = (YEAR_DAY - WEEK_DAY + 6) / 7 + 1;

    IF (YEAR_DAY = 0) THEN
      CURRENT_WEEK = 1;
    ELSE
      IF (WEEK_DAY = 0) THEN
        CURRENT_WEEK = CURRENT_WEEK + 1;

    IF (CURRENT_WEEK <> FN_WEEK) THEN
      SUSPEND;

    BEGIN_DATE = BEGIN_DATE + 1;
 END
END


ЗЫ: Это не правнук :D

-- 
С уважением,
 Пиминов Роман

Ответить