SQL вычисляет оставшиеся дни на основе интервала дней (используя SQL Server 2005)? - PullRequest
0 голосов
/ 25 января 2010

У меня есть таблица, которая представляет подписку пользователя на нашу систему. У меня есть две таблицы. Один представляет подписку для учетной записи, а другой представляет тип подписки. Таблица подписки относится к таблице типов подписки с полем subscriptionTypeID в таблице типов подписки. Мне нужно выяснить дни, оставшиеся для этого аккаунта. Вот мой пример:

Пользователь зарегистрировался 1 января 2010 года и его срок составляет 30 дней. Исходя из сегодняшней даты (25 января 2010 г.) у них осталось 6 дней.

Мне нужна помощь в разработке SQL. Вот что у меня есть в моей хранимой процедуре:

@SubscriptionTypesID int

Declare @term int
Declare remainder int
Set @term = (SELECT subscriptionTerm 
         FROM dbo.SubscriptionTypes 
         where dbo.SubscriptionTypes.SubscriptionTypesID = @SubscriptionTypesID)

Теперь мне нужно выяснить, что делать с оставшимся запросом или можно ли каким-то образом иметь один оператор SQL, чтобы мне не приходилось получать термин отдельно.

Обновление:

Вот что я получил сейчас со всей вашей помощью, но я все еще хочу более изящный способ закачивать значение поля термина в запрос:

Select (DateDiff(day,getDate(),DATEADD (day , 30, '01/01/2010' ))) days

Обновление 2.0;)

Иногда ответ прямо передо мной, и я даже не вижу его. Я склонен переосмысливать проблемы и усложнять их, чем они должны быть. Спасибо всем, кто помог! Вот код:

SELECT (DateDiff(day,getDate(),DATEADD (day , subscriptionTerm, dbo.Subscriptions.subscriptionDate ))) days
FROM
  dbo.Subscriptions
  INNER JOIN dbo.SubscriptionTypes ON (dbo.Subscriptions.subscriptionTypeID = dbo.SubscriptionTypes.SubscriptionTypesID)
WHERE
  dbo.Subscriptions.userID = 129

Ответы [ 3 ]

1 голос
/ 25 января 2010

Э-э, почему бы вам не сравнить текущую дату с датой подписки +30 дней? Я считаю, что это будет выглядеть как

if(GETDATE() > DATEADD(day,30,@SubscriptionDate))
BEGIN

END

В комментариях ниже вы спросили, как узнать количество дней. В SQL есть метод для этого ...

SELECT DATEDIFF(datepart,start,end)

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

DECLARE @Difference int
SELECT @Difference = DATEDIFF(day,@SubscriptionDate,GETDATE())
1 голос
/ 25 января 2010

Вы можете использовать функциональность Datadiff из sql:

http://msdn.microsoft.com/en-us/library/ms189794.aspx

Вы также можете решить эту проблему, используя:

DATEADD (datepart , number, date )

Вы можете найти больше в том же MSDNстранице, просто воспользуйтесь окном поиска и введите «Dateadd»

Удачи вам в оставшемся времени;)

0 голосов
/ 25 января 2010

Вот оно ... Спасибо всем за понимание:

SELECT (DateDiff(day,getDate(),DATEADD (day , subscriptionTerm, dbo.Subscriptions.subscriptionDate ))) days 
FROM 
  dbo.Subscriptions 
  INNER JOIN dbo.SubscriptionTypes ON (dbo.Subscriptions.subscriptionTypeID = dbo.SubscriptionTypes.SubscriptionTypesID) 
WHERE 
  dbo.Subscriptions.userID = 129 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...