查找给定日期之间的月份

时间:2012-10-03 12:37:18

标签: sql sql-server sql-server-2008 tsql date

  

可能重复:
  Months between two dates

我需要提供结果,两个日期之间的月份是多少。

EG。假设日期是

Declare @FrDate datetime,@ToDate datetime
Set @FrDate ='2010-05-31 17:38:58.577' 
Set @ToDate ='2010-09-01 17:38:58.577'

需要输出

Result
MAY
JUN
JUL
AUG
SEP

3 个答案:

答案 0 :(得分:2)

试试这个:

DECLARE @FrDate  DATETIME,
        @ToDate    DATETIME;

Set @FrDate ='2010-05-31 17:38:58.577' 
Set @ToDate ='2010-09-01 17:38:58.577'

;WITH MONTHS (date)
AS
(
    SELECT @FrDate
    UNION ALL
    SELECT DATEADD(month,1,date)
    from months
    where date<=@ToDate
)
SELECT Datename(month,date) AS MONTH FROM MONTHS

结果:

MONTH
-----------------
May
June
July
August
September

(5 row(s) affected)

要在结果中获取短月份名称,您可以改为使用以下行:

SELECT LEFT(CONVERT(VARCHAR,date,100),3) AS MONTH FROM MONTHS

要以UPPER形式获取月份名称,您可以使用UPPER函数:

SELECT UPPER(LEFT(CONVERT(VARCHAR,date,100),3)) AS MONTH FROM MONTHS

答案 1 :(得分:0)

创建calendar table,然后您可以简单地写一下:

select distinct MonthName
from dbo.Calendar
where BaseDate between @StartDate and @EndDate

答案 2 :(得分:0)

另一种方法

Declare @FrDate datetime,@ToDate datetime 
Set @FrDate ='2010-05-31 17:38:58.577'  
Set @ToDate ='2010-09-01 17:38:58.577' 

select 
    datename(month,dateadd(month,number-1,@FrDate)) as month_name
from 
    master..spt_values 
where 
    type='p'and number between 1 and datediff(month,@frdate,@todate)+1
相关问题