Расчет даты между двумя датами - PullRequest
0 голосов
/ 19 мая 2011

Мне нужна помощь в расчете даты.

У меня есть то, что истекает через каждые X количество дней от его Create Date

Так что, если Create Date было4/22 и дни истечения были установлены на 10 срок его действия истекает

5/2, 5/12, 5/22, 6/1 и т. Д.

Мне нужно иметь возможность сообщить людям, когда истекает срок действия их предметав течение 5 дней

Так что для 5/2 мне нужно добавить этот элемент в счетчик, если текущая дата находится между 4/27 и 5 / 2.

Это в SQL.

Все, что у нас есть, это RunDate, CreateDate и ExpirationDays

Я сделал математический расчет, чтобы приблизительно получить дату истечения срока, но если он получит остаток, онне полезно, и я не хочу искажать чей-либо ответ, публикуя то, что я думаю, должно быть.Я пробовал немало способов и немного отчаялся.

Любая помощь будет принята с благодарностью

РЕДАКТИРОВАТЬ:

Я сделалматематика для этого, и это выглядит так

CreateDate + (((RunDate - CreateDate)/ExpireDays)*ExpireDays)) Between Rundate-1 and Rundate +5

Но это дает мне арифметическое переполнение в SQL, поэтому я не уверен, что делать ...

Ответы [ 2 ]

0 голосов
/ 19 мая 2011
With Expirations As
    (
    Select Cast('2011-04-22' As datetime) As CreateDate, 10 As ExpirationDays
    Union All
    Select DateAdd( d, ExpirationDays, CreateDate ), ExpirationDays
    From Expirations
    Where CreateDate <= DateAdd(d,10,CURRENT_TIMESTAMP) --(arbitary end date)
    )
Select *
From Expirations
Where CreateDate >= CURRENT_TIMESTAMP
    And CreateDate <= DateAdd(d,5,CURRENT_TIMESTAMP)

Использование логики, аналогичной математике, использованной вами в обновленном сообщении:

With Expirations As
    (
    Select Cast('2011-04-22' As datetime) As CreateDate, 10 As ExpirationDays
    Union All
    Select DateAdd( d, ExpirationDays, CreateDate ), ExpirationDays
    From Expirations
    Where CreateDate <= DateAdd(d,10,CURRENT_TIMESTAMP) --(arbitary end date)
    )
Select *
From Expirations
Where CreateDate >= DateAdd(d, -1, CURRENT_TIMESTAMP)
    And CreateDate <= DateAdd(d, 5, CURRENT_TIMESTAMP)
0 голосов
/ 19 мая 2011

В MySql вы могли бы сделать что-то

(ExpirationDays - (DATEDIFF(NOW(), CreateDate) % ExpirationDays)) > 5;

РЕДАКТИРОВАТЬ

Для SQL Server вы бы сделали это немного по-другому:

@expiringDays - (DATEDIFF(dd, ml.CreateDate, @date) % @expiringDays) > 5;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...