Sql server 仅提及月份和年份时的sql server日期差异

Sql server 仅提及月份和年份时的sql server日期差异,sql-server,datetime,datediff,sql-date-functions,Sql Server,Datetime,Datediff,Sql Date Functions,考虑到2个月和2年。没有提到这一天。我需要计算SQL中这两个日期之间的差异。SQLServerDB中列的示例 MonthFROM YearFROM MonthTo YearTO 12 2010 1 2012 输出应为14个月。以这种方式记录日期不是个好主意 SELECT DATEDIFF(mm, CAST(YearFROM as varchar) + RIGHT('0' + CAST(MonthFROM as varchar), 2)

考虑到2个月和2年。没有提到这一天。我需要计算SQL中这两个日期之间的差异。SQLServerDB中列的示例

MonthFROM    YearFROM   MonthTo  YearTO

12           2010       1        2012

输出应为14个月。

以这种方式记录日期不是个好主意

SELECT DATEDIFF(mm, CAST(YearFROM as varchar) + RIGHT('0' + CAST(MonthFROM as varchar), 2) + '01',
                      CAST(YearTO as varchar) + RIGHT('0' + CAST(MonthTO as varchar), 2) + '01')
其中:

SELECT DATEDIFF(month, 
         CONVERT(VARCHAR(19),
                 CAST(MonthFROM as varchar) + '/01/' + CAST(YearFROM as varchar),
                 101), 
         CONVERT(VARCHAR(19), 
                 CAST(MonthTo as varchar) + '/01/' + CAST(YearTO as varchar), 
                 101)) + 1 AS MonthPast
FROM MyTable;
结果将是:

MONTHPAST
14

实际月份差异为
13
,但结果是
14
。如果您的计算错误,并且确实需要
13
,则从查询中删除
+1

请使用简单算法尝试以下操作:

Select (YearTo - YearFrom) * 12 + MonthTo - MonthFrom + 1 as Difference
  from MyTable;

如果您使用的是SQL Server 2012 下面是实现这一点的快速方法

SELECT DATEDIFF(month, DATEFROMPARTS (YearFROM, MonthFROM, 01),
                DATEFROMPARTS (YearTO, MonthTo, 01))
FROM YourTable

演示

这些不是日期。那么你到底在寻找什么样的结果呢?@AaronBertrand。不,它们不是约会。只有4列类型的整数,包含月份和年份。希望得到14个月之间的输出事实上,2012年1月将是2010年12月之后的13个月,而不是你预期的14个月。客户只存储合同有效期的月份和年份。例如,他提到2010年6月至2012年9月。这就是为什么我只存储月份和年份。在使用您的查询时,我还收到以下错误:“从字符串转换日期和/或时间时转换失败”。所有4列都是整数。这意味着您的列中的数据不正确,例如,MonthFROM中的值13。@RookieAppler Hamlet的代码正常。如果我是你,我会在所有月份列上设置一个检查约束,以避免出现问题。我认为你不必在月份中添加+1,如果“从”和“到”年和月是相同的,那么它也会产生差异。。检查这个,我根据用户信息添加了+1到month,从2010/12到2012/1,根据他的要求有14个月。这真的取决于他对结果做了什么。关于该问题的信息不足,无法确定14是错误的。请注意,对于问题中指定的日期,代码返回13而不是14。您可能需要添加+1以满足用户的需求。