【发布时间】:2020-01-06 11:18:10
【问题描述】:
对于所有可能的情况,答案都应该是正确的。下面我写了一些可能的场景。
例如 -
2012-12-31 和 2013-02-28 之间的月份数 答案应该是 - 2
2019-01-31 和 2019-03-01 之间的月份数 答案应该是 - 1
【问题讨论】:
标签: sql sql-server monthcalendar
对于所有可能的情况,答案都应该是正确的。下面我写了一些可能的场景。
例如 -
2012-12-31 和 2013-02-28 之间的月份数 答案应该是 - 2
2019-01-31 和 2019-03-01 之间的月份数 答案应该是 - 1
【问题讨论】:
标签: sql sql-server monthcalendar
一种简单易行的方法,只需将此示例 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 表达式?
DATEDIFF(MONTH,' 20121231','20130228')返回2。您在“问题”中没有提供有关所需逻辑或目标的更多详细信息;所以DATEDIFF(MONTH... 完成了你指定的工作。