在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
这是一种简单易行的方法,只需将此示例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我已经针对所有可能的情况对代码进行了深入测试。谢谢