我希望我能正确解释。
我有这张桌子:
[InspectionSchedule] [smallint] NULL,
[NeedsAssesment] [smallint] NULL,
[DateLastInspected] [datetime2](7) NULL,
假设
DateLastInspected
在全局上是2010-01-01 00:00:00.0000000
。InspectionSchedule
的值为1、5或10,代表必须检查资产的年限。我希望通过一个简单的查询寻求帮助,该查询将采用
DateLastInspected
,向其中添加InspectionSchedule
的值,并在未来n年返回Year。我知道这是由CAST运算符完成的,但是我从那里迷路了。这就是棘手的地方:根据财务年度(10月1日),我们只需要一年,即未来N年,而不是未来n年的日期。例如,如果资产是在09财年的
2010-07-30 00:00:00.0000000
上检查的,并且检查周期为5年,则此“算术”将下一个检查年度返回为“ 2014”。我希望这是有道理的。我敢肯定,加入一堆CASTS和DATEPARTS很简单,但是我什至不知道从哪里开始。 最佳答案
您可以使用以下代码:
SELECT DATEPART(YEAR, DATEADD(MONTH, -9, DATEADD(YEAR, [InspectionSchedule], [DateLastInspected])))
它做三件事:
添加检查计划的年数,直到最近一次检查为止。我们得到下次检查的日期。
从该日期删除9个月,以便从会计年度转换为实际年度
仅取年值
关于sql - 根据smallint和datetime2(7)的组合计算年份,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24537416/