计算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中两个日期之间的月数[重复]的主要内容,如果未能解决你的问题,请参考以下文章