sql server中两个日期之间的月份,sql server中每个日期的开始日期和结束日期

avi*_* ss 1 sql sql-server date

我希望两个日期之间有几个月的开始日期和结束日期.如果我输入startdate作为"2017-04-01"并结束为"2017-07-31",我想要的月份列表,即4月,5月,6月7月份分别以他们的开始和结束日期为准.建议我如何实现.

Gor*_*off 5

一种方法是递归CTE:

with cte as (
      select dateadd(day, 1 - day(@startdate), @startdate) as som,
             eomonth(@startdate) as eom
      union all
      select dateadd(month, 1, som), eomonth(dateadd(month, 1, som))
      from cte
      where dateadd(month, 1, som) < @enddate
     )
select *
from cte;
Run Code Online (Sandbox Code Playgroud)

如果您想要月份的名称,那么您可以使用datename(month, som).

  • 注意:[**`eomonth()`**](https://docs.microsoft.com/en-us/sql/t-sql/functions/eomonth-transact-sql)支持从SQL Server 2012开始 (2认同)