Генерация записей на интервале времени (Еженедельно, Ежемесячно, Ежеквартально, Ежегодно) - PullRequest
0 голосов
/ 02 сентября 2011

Мне нужно создать записи по заданной дате начала, дате окончания и частоте времени (Еженедельно, Ежемесячно и т. Д.)

Пример-1:

  1. Дата начала: 15 января 2011 года
  2. Дата окончания: 31 декабря 2011 года
  3. Частота: ежемесячно

Сгенерированные отчеты:

  1. 15 января - 31 января

  2. 1 февраля - 28 февраля (високосный год 29 февраля)

  3. 1Март - 31 марта

.,.

  • 4-1 декабря - 31 декабря

Пример-2

  • Дата начала: 15 января 2011
  • Дата окончания: 31 декабря 2011
  • Частота: Еженедельно

Сгенерированные отчеты:

  • 1-15 января - 16 января

  • 2-17 января - 23 января

  • 3-24 января - 30 января

.,.

  • 50-26 декабря - 31 декабря

То же, что ежеквартально.

Любая помощь

1 Ответ

1 голос
/ 02 сентября 2011

Я думаю, что вы в основном спрашиваете, как проходить месяцы / недели / кварталы.

Это должно дать вам хорошее начало, чтобы, я надеюсь, указать правильное направление. Вам просто нужно возиться со встроенными функциями даты SQL, такими как DATEADD, DATEDIFF & DATEPART

DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
DECLARE @TimePeriod NVARCHAR(50)
DECLARE @RptDate DATETIME

SET @startDate = '1/15/2011'
SET @endDate = '12/31/2011'
SET @TimePeriod = 'Monthly'

SET @RptDate = @startDate
WHILE @RptDate < @endDate
BEGIN
    PRINT @RptDate      --- This prints out the dates I think you want
    IF @TimePeriod = 'Monthly'
        SET @RptDate = DATEADD(mm, 1, DATEADD(dd, -DAY(@RptDate) + 1,@RptDate))

    IF @TimePeriod = 'Weekly'
        SET @RptDate = DATEADD(ww, 1, DATEADD(dd, -DATEPART(weekday,@RptDate) + 1,@RptDate))

    IF @TimePeriod = 'Quarterly'
        SET @RptDate = DATEADD(qq, 1, DATEADD(qq, DATEDIFF(qq, 0, @RptDate), -1) + 1)

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...