我有一个表,表示用户对我们系统的订阅。我有两张桌子。一个表示帐户的订阅,另一个表示订阅的类型。订阅表涉及订阅类型表,订阅类型表中包含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
答案 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