SQL中两个日期之间的整月数(非部分)
如何在SQL中计算两个日期之间的完整月份(非部分)?结果如下: 开始日期|结束日期|整月SQL中两个日期之间的整月数(非部分),sql,date,Sql,Date,如何在SQL中计算两个日期之间的完整月份(非部分)?结果如下: 开始日期|结束日期|整月 2015年2月5日| 2015年6月29日| 02015年1月5日| 2015年6月30日| 2 2015年1月5日| 2015年5月6日| 12015年5月31日| 2015年6月30日| 12015年1月2日| 2015年2月28日| 12015年2月27日| 2015年3月30日| 02015年3月31日| 1 到目前为止,我的代码是: Select startDate [Start Date], e
2015年2月5日| 2015年6月29日| 0
2015年1月5日| 2015年6月30日| 2
2015年1月5日| 2015年5月6日| 1
2015年5月31日| 2015年6月30日| 1
2015年1月2日| 2015年2月28日| 1
2015年2月27日| 2015年3月30日| 0
2015年3月31日| 1 到目前为止,我的代码是:
Select startDate [Start Date],
endDate [End Date],
DATEDIFF(MM,startDate,endDate) + CASE
WHEN DAY(endDate) =DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,endDate),0)))
THEN 1
ELSE 0
END - CASE
WHEN DAY(startDate) = 1
THEN 0
ELSE 1
END [Full Month]
FROM table
我需要在另一个多层嵌套CASE语句中使用它,因此如果可能的话,尽量避免使用额外的CASE语句
其他详情:
我正在为第三方软件编写报告,这些软件并不总是相同的RDBMS,主要是MS SQL Server的旧版本。也希望在报告本身的代码,而不是存储在数据库中 我会这样做:
SELECT
DATEDIFF(mm,startDate,endDate)-1 +
IIF(EOMONTH(endDate)=endDate, 1, 0) +
IIF(1=DAY(startDate), 1, 0)
AS full_months FROM dates;
或
(MSSQL Server 2008)不同的RDBMS之间的日期函数略有不同,因此请指定您使用的SQL数据库(和版本)。2/27到3/27、3/28、3/29、3/30和3/31的结果如何?您的代码对如何确定月底有很好的了解(MS SQL Server 2012+)。否则,它与问题中的代码相同,并且没有回答如何避免案例陈述。啊,我误解了他的意思,认为他不想使用任何其他案例陈述,而不是他在回答中已有的,只是更新以避免案例陈述+1。回答正确(MS SQL Server 2012+)。仍在等待,看看是否有一个旧版本的好主意。