SQL根据天数间隔计算剩余天数(使用SQL Server 2005)?

时间:2010-01-25 15:25:57

标签: sql sql-server sql-server-2005

我有一个表,表示用户对我们系统的订阅。我有两张桌子。一个表示帐户的订阅,另一个表示订阅的类型。订阅表涉及订阅类型表,订阅类型表中包含subscriptionTypeID字段。我需要弄清楚该帐户的剩余天数。这是我的例子:

用户于2010年1月1日注册,期限为30天。根据今天的日期(2010年1月25日),他们将有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;)

有时答案就在我面前,我甚至看不到它。我倾向于过度思考问题并使它们变得比它们需要的更复杂。感谢所有帮助过的人! HEre是代码:

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 个答案:

答案 0 :(得分:1)

呃,你为什么不把当前日期和订阅日期+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 :(得分:1)

您可以使用sql:

中的Datadiff功能

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

你也可以使用以下方法解决它:

DATEADD (datepart , number, date )

您可以在同一MSDN页面中找到更多内容,只需使用搜索框并输入“Dateadd”

祝你剩下的时间好运;)

答案 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