sql - 计算与日期不同的月份 SQL SERVER

标签 sql sql-server datediff

我在使用 sql server 查询计算 2 个日期的月份差异时遇到问题

我尝试使用 DATEDIFF(MONTH, SD, ED)

比如这个

SD = '2013-12-10 00:00:00.000'
ED = '2014-12-09 00:00:00.000'
SELECT DATEDIFF(MONTH, SD, ED)

--result : 12 //this correct result


SD = '2013-12-10 00:00:00.000'
ED = '2014-12-10 00:00:00.000'
SELECT DATEDIFF(MONTH, SD, ED)

--result : 12 //this incorrect result, the result that i want is 13


SD = '2013-12-10 00:00:00.000'
ED = '2014-12-15 00:00:00.000'
SELECT DATEDIFF(MONTH, SD, ED)

--result : 12 //this incorrect result, the result that i want is 13

SD = '2013-12-01 00:00:00.000'
ED = '2014-11-30 00:00:00.000'
SELECT DATEDIFF(MONTH, SD, ED)

--result : 11//this incorrect result, the result that i want is 12

是否有任何解决方案来获得 2 个日期的月差的正确结果?? 有人可以帮助我吗?

谢谢

最佳答案

DATEDIFF 只比较月份而不考虑其中的日期。由于您想要包括部分月份,请尝试比较日期,并添加 CASE WHEN DATEPART(day,@d2) >= DATEPART(day,@d1) THEN 1 ELSE 0 END

因此使用您问题中的符号:

SELECT DATEDIFF(MONTH, SD, ED) +
    CASE WHEN DATEPART(DAY, ED) >= DATEPART(DAY, SD) THEN 1 ELSE 0 END

关于sql - 计算与日期不同的月份 SQL SERVER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27631388/

相关文章:

sql - 删除行并获取空间 postgresql

java - 从字符串数组中删除逗号

asp.net - 如何使用自联接和项目表 "hierarchically structure"绑定(bind)asp.net控件?

sql - 一个月内每天的 MSSQL 总计

sql-server - 具有多个输出参数的 SQL Server 2008 存储过程

MySQL:MIN 和 Group By:获取每个人一天的 12x # 个事件的第一个时间戳

vb.net - 以分钟为单位的日期和时差

sql - 计算Postgresql中的日期差异

SQL 日期时间天数差异

sql - Postgresql 增量和条件过滤