我希望我能正确解释。

我有这张桌子:

[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/

10-13 08:09