【发布时间】:2015-07-30 21:30:55
【问题描述】:
如何在 SQL 中计算两个日期之间的整月(非部分)?结果应该如下:
开始日期 |结束日期 |整月
2015 年 5 月 2 日 | 2015 年 6 月 29 日 | 0
2015 年 5 月 1 日 | 2015 年 6 月 30 日 | 2
2015 年 5 月 1 日 | 2015 年 6 月 5 日 | 1
2015 年 5 月 31 日 | 2015 年 6 月 30 日 | 1
2015 年 2 月 1 日 | 2015 年 2 月 28 日 | 1
2015 年 2 月 27 日 | 2015 年 3 月 30 日 | 0
2015 年 2 月 27 日 | 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。还希望报告本身的代码而不是存储在数据库中。
【问题讨论】:
-
日期函数从一个RDBMS到下一个略有不同,所以请指定您使用的SQL数据库(和版本)。
-
2/27 到 3/27、3/28、3/29、3/30 和 3/31 的结果是什么?