添加一年到目前为止

时间:2018-05-16 13:03:23

标签: sql sql-server

我们有一个Microsoft SQL数据库表,其中包含名为:

的inapp购买
UserInAppPurchase 

我们的应用程序中包含过期日期(以及更多)我们的inapp购买。如果日期是在这个月,我们想在当前到期日期添加一年(伪代码):

If column ProductID = 'com.crew.1year' 
AND column Platform = 'Android' 
AND column ValidTo = in this month

Then
    add one year to the date in ValidTo

ValidTo中的日期格式如下:

   2018-05-15 00:00:00.000

那里的日期和所有ifs都已满足,现在日期必须更新一年。

我正在努力为此创建一个SQL查询。我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:4)

我会选择更像这样的东西(使用蒂姆的初始SQL):

UPDATE yourTable
SET ValidTo = DATEADD(year, 1, ValidTo)
WHERE [Platform] = 'Android'
  AND ProductID = 'com.crew.1year'
  AND ValidTo >= DATEADD(MONTH, DATEDIFF(MONTH, 0,GETDATE()),0)
  AND ValidTo < DATEADD(MONTH, DATEDIFF(MONTH, 0,GETDATE())+1,0);

这确保您只更新今年的行,同时维护SARGability,因为ValidTo子句中的列WHERE没有应用任何功能。

答案 1 :(得分:1)

尝试此更新查询:

UPDATE yourTable
SET ValidTo = DATEADD(year, 1, ValidTo)
WHERE
    Platform = 'Android' AND
    ProductID = 'com.crew.1year' AND
    DATEPART(month, GETDATE()) = DATEPART(month, ValidTo);
-- and if we also want to restrict to expiries in the same year:
-- AND DATEPART(year, GETDATE()) = DATEPART(year, ValidTo);

对于那些ValidTo日期与当月相同的记录,此更新查询会将ValidTo日期向前移动一年。我还在PlatformProductID上添加了检查。