我们有一个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查询。我非常感谢你的帮助。
答案 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
日期向前移动一年。我还在Platform
和ProductID
上添加了检查。