两个日期之间的月份

Nit*_*esh 22 sql sql-server

是否有可能month names在两个日期之间SQl

也就是说, 2011-05-01而且2011-08-01都投入我只想输出

------------
Month
------------
May
June
July
August
Run Code Online (Sandbox Code Playgroud)

如果有任何机构知道查询请分享.

Bog*_*ean 39

DECLARE @StartDate  DATETIME,
        @EndDate    DATETIME;

SELECT   @StartDate = '20110501'        
        ,@EndDate   = '20110801';


SELECT  DATENAME(MONTH, DATEADD(MONTH, x.number, @StartDate)) AS MonthName
FROM    master.dbo.spt_values x
WHERE   x.type = 'P'        
AND     x.number <= DATEDIFF(MONTH, @StartDate, @EndDate);
Run Code Online (Sandbox Code Playgroud)

结果:

MonthName
------------------------------
May
June
July
August

(4 row(s) affected)
Run Code Online (Sandbox Code Playgroud)


Jam*_*iec 29

您可以使用递归CTE,通过构建日期表以及从每个日期获取月份名称来执行此操作:

declare @start DATE = '2011-05-01'
declare @end DATE = '2011-08-01'

;with months (date)
AS
(
    SELECT @start
    UNION ALL
    SELECT DATEADD(month,1,date)
    from months
    where DATEADD(month,1,date)<=@end
)
select Datename(month,date) from months
Run Code Online (Sandbox Code Playgroud)


Ela*_*son 8

我已经修改了Jamiec的答案,输出了本月的最后一天.

declare @start DATE = '2014-05-01'
declare @end DATE = getdate()

;with months (date)
AS
(
    SELECT @start
    UNION ALL
    SELECT DATEADD(month, 1, date)
    from months
    where DATEADD(month, 1, date) < @end
)
select     [MonthName]    = DATENAME(mm, date),
           [MonthNumber]  = DATEPART(mm, date),  
           [LastDayOfMonth]  = DATEPART(dd, EOMONTH(date)),
           [MonthYear]    = DATEPART(yy, date)
from months
Run Code Online (Sandbox Code Playgroud)

这给出了输出:

MonthName   MonthNumber LastDayOfMonth  MonthYear
May         5           31              2014
June        6           30              2014
July        7           31              2014
August      8           31              2014
September   9           30              2014
Run Code Online (Sandbox Code Playgroud)