Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中两个日期之间的整月数(非部分)_Sql_Date - Fatal编程技术网

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

如何在SQL中计算两个日期之间的完整月份(非部分)?结果如下:

开始日期|结束日期|整月
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+)。仍在等待,看看是否有一个旧版本的好主意。