sql - 根据 smallint 和 datetime2(7) 的组合计算年份

标签 sql sql-server sql-server-2008

我希望我能正确解释这个......

我有这张表:

[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])))

它做了三件事:

  1. 将检查计划的年数添加到上次检查日期。我们得到下一次检查的日期。
  2. 从此日期删除 9 个月,以便从会计年度转换为实际年度
  3. 只取年份值

关于sql - 根据 smallint 和 datetime2(7) 的组合计算年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24537416/

相关文章:

mysql - SQL中如何获取 "group by"中某一行的所有值?

sql - 添加一列,这是 Hive 中某些公式的结果

c# - 从 SQL Server 数据库项目引用可移植类库时出现问题

sql - 解析逗号分隔的字符串以生成Where子句中的IN字符串列表

SQL Server 相当于此 MySQL 排序子句

sql-server-2008 - SSIS。导入 500 个文件

SQL Server 如果没有可用的 future 日期,则选择最近的过去日期

sql - 存储过程始终返回 -1(asp.net MVC、Entity、SQL)

sql - 在邻接表模型中克隆树的数据库表示的最有效方法

sql-server - ADOQuery,触发和重新查询错误