我希望我能正确解释这个......
我有这张桌子:
[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年。我知道这是用CAST运算符完成的,但我从那里迷路了。
在这里,它变得棘手:未来n年,我们只需要一年,即未来N年,基于财政年度(10月1日)。例如,如果资产在2010-07-30 00:00:00.0000000
上检查,即09财年,并且是在5年的检查周期,那么这个"数学"将作为" 2014"返回下一个检查年度。我希望这是有道理的。我确定这是加入一堆CASTS和DATEPARTS的简单问题,但我甚至不知道从哪里开始。
答案 0 :(得分:1)
您可以使用此类代码:
SELECT DATEPART(YEAR, DATEADD(MONTH, -9, DATEADD(YEAR, [InspectionSchedule], [DateLastInspected])))
它有三件事:
答案 1 :(得分:0)
您可以使用DATEADD()
将InspectionSchedule
添加到DateLastInspected
,然后使用YEAR()
功能获取年份。这些方面的东西:
SELECT YEAR(DATEADD(YEAR,InspectionSchedule,DateLastInspected))
现在,确定DateLastInspected
是否属于哪个财政年度是另一回事。
答案 2 :(得分:0)
您应该使用SQL DATEADD(datepart,number,date)
功能:与您的案例DATEADD(year,number,date)
相关。 RGDS,
答案 3 :(得分:0)
我相信以下内容会为您提供所需内容:
select datepart(yyyy, dateadd(yy, InspectionSchedule, DateLastInspected))
from <YourTableName>
编辑:如果您希望结果是下次检查的会计年度,您将需要为最后检查日期是在01 - 10月之前或之后添加测试,并添加1到日历年,以获得您的会计年度,如下:
select datepart(yyyy, dateadd(yy, InspectionSchedule, DateLastInspected)) +
case when datepart(MM, DateLastInspected) >= 10 then 1 else 0 end
from <YourTableName>
答案 4 :(得分:0)
我认为这会更优雅......
IF (UPDATE(DateLastInspected) OR UPDATE (InspectionSchedule))
BEGIN
UPDATE [table] SET NeedsAssesment = DATEPART(YEAR, DATEADD(MONTH, +3, DateLastInspected))+ InspectionSchedule
END
我会使用触发器,但那只是我。祝你好运tpcolson