计算SQL中两个日期之间的月数[重复]

Posted

技术标签:

【中文标题】计算SQL中两个日期之间的月数[重复]【英文标题】:Calculate month count between two date in SQL [duplicate] 【发布时间】:2020-01-06 11:18:10 【问题描述】:

对于所有可能的情况,答案都应该是正确的。下面我写了一些可能的场景。

例如 -

    2012-12-31 和 2013-02-28 之间的月份数 答案应该是 - 2

    2019-01-31 和 2019-03-01 之间的月份数 答案应该是 - 1

【问题讨论】:

【参考方案1】:

一种简单易行的方法,只需将此示例 SQL 复制并粘贴到 MSSQL 并执行即可。 如果需要,您可以使用此代码创建一个函数并执行。

DECLARE @StartDate DATE = '2019-01-31'
DECLARE @EndDate DATE = '2019-02-28'

SELECT
   DATEDIFF(MONTH, @StartDate, @EndDate)+
   (CASE
    WHEN FORMAT(@StartDate,'yyyy-MM') != FORMAT(@EndDate,'yyyy-MM') AND 
      DATEPART(DAY,@StartDate) > DATEPART(DAY,@EndDate) AND 
      DATEPART(DAY,@EndDate) = DATEPART(DAY,EOMONTH(@EndDate)) THEN 0

    WHEN FORMAT(@StartDate,'yyyy-MM') != FORMAT(@EndDate,'yyyy-MM') AND 
      DATEPART(DAY,@StartDate) > DATEPART(DAY,@EndDate) THEN -1 

    ELSE 0 END) AS NumberOfMonths

【讨论】:

问题中的样本数据,和你这里使用的开始日期不一样。当DATEDIFF(MONTH,' 20121231','20130228') 已经返回2 时,为什么还需要CASE 表达式? 您在 the same answer 上发布了关于此问题已作为副本关闭的问题。不要复制答案,而是标记以将问题作为重复项关闭。 @Larnu 因为没有大小写表达式,我们在某些情况下会得到错误的答案。例如 - 请检查。 2019 年 1 月 31 日和 2019 年 3 月 1 日。 你在你的“问题”@ShehanSilva , 2012-12-31 和 2013-02-28 中给出了 一个 的例子,并说答案应该是 2。DATEDIFF(MONTH,' 20121231','20130228')返回2。您在“问题”中没有提供有关所需逻辑或目标的更多详细信息;所以DATEDIFF(MONTH... 完成了你指定的工作。 @Larnu。但是当我们为问题提供解决方案时,我们应该调查他们面临的实际问题是什么。为此,我们应该考虑所有可能的情况,并且对于所有可能的情况,答案应该是正确的。否则没有必要发布答案,用户可能会误导。我已经发布了这个答案 bcz 我已经针对所有可能的情况深入测试了此代码。谢谢

以上是关于计算SQL中两个日期之间的月数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA中获取日期和今天之间的月数[重复]

查询两个日期相差的月数和剩下的天数

计算两个日期之间的月数

r 中每年两个日期之间的月数

两个日期之间的月数

如何计算定义自定义财务日历的两个日期之间的月数?