在SQL中计算两个日期之间的月份计数

在SQL中计算两个日期之间的月份计数,sql,sql-server,monthcalendar,Sql,Sql Server,Monthcalendar,对于所有可能的情况,答案都应该是正确的。下面我写了一些可能的场景。 例如 2012-12-31和2013-02-28之间的月数 答案应该是-2 2019-01-31和2019-03-01之间的月数 答案应该是-1 这是一种简单易行的方法,只需将此示例SQL复制并粘贴到MSSQL并执行即可。 如果需要,可以使用此代码创建函数并执行 DECLARE@StartDate DATE='2019-01-31' 声明@EndDate日期='2019-02-28' 挑选 DATEDIFF(月、@StartDa

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

例如

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

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


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

    DECLARE@StartDate DATE='2019-01-31'
    声明@EndDate日期='2019-02-28'
    挑选
    DATEDIFF(月、@StartDate、@EndDate)+
    (案例
    当格式(@StartDate,'yyyy-MM')!=格式(@EndDate,'yyyy-MM')和
    DATEPART(DAY,@StartDate)>DATEPART(DAY,@EndDate)和
    DATEPART(DAY,@EndDate)=DATEPART(DAY,EOMONTH(@EndDate))然后0
    当格式(@StartDate,'yyyy-MM')!=格式(@EndDate,'yyyy-MM')和
    DATEPART(DAY,@StartDate)>DATEPART(DAY,@EndDate)然后-1
    ELSE 0结束)作为NumberOfMonths
    
    问题中的示例数据与此处使用的开始日期不同。当
    DATEDIFF(MONTH,'20121231','20130228')
    已经返回
    2
    时,您为什么需要一个
    CASE
    表达式?您在问题上发布了该表达式已作为的副本关闭。不要复制答案,而是将问题标记为重复关闭。@Larnu,因为在某些情况下,如果没有大小写表达式,我们会得到错误的答案。请检查一下。2019-01-31和2019-03-01。你在ShehanSilva 2012-12-31和2013-02-28的“问题”中给出了一个例子,并说答案应该是2<代码>日期差异(月'20121231','20130228')返回
    2
    。您在“问题”中没有给出关于所需逻辑或目标的更多细节;所以
    DATEDIFF(月……/代码)做你指定的工作。@拉努。但是当我们给出一个问题的解决方案时,我们应该调查他们所面临的实际问题。为了使我们考虑所有可能的情景和答案,应该对所有可能的情况都是正确的。否则,没有答案的一点,用户可能是MIS。我已经发布了这个答案,bcz我已经针对所有可能的情况对代码进行了深入测试。谢谢