我希望我能正确解释这个......
我有这张表:
[InspectionSchedule] [smallint] NULL,
[NeedsAssesment] [smallint] NULL,
[DateLastInspected] [datetime2](7) NULL,
假设 DateLastInspected
在全局范围内是 2010-01-01 00:00:00.0000000
。
InspectionSchedule
的值为 1、5 或 10,表示必须检查 Assets 的年数。
我希望得到一个简单查询的帮助,该查询将采用 DateLastInspected
,将 InspectionSchedule
的值添加到它,并返回一年,n 年后的 future .我知道这是通过 CAST 运算符完成的,但我从那里迷路了。
这就是它变得棘手的地方:而不是 future n 年的日期,我们只需要一年, future N 年,基于财政年度(10 月 1 日)。例如,如果一项 Assets 在 2010-07-30 00:00:00.0000000
(即 09 财年)检查,并且检查周期为 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/