【问题标题】:Finding months between given dates [duplicate]查找给定日期之间的月份[重复]
【发布时间】:2012-09-24 09:19:09
【问题描述】:

可能重复:
Months between two dates

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

例如。假设日期是

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

【问题讨论】:

  • 日期维度表可以让这个问题变得简单...

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


【解决方案1】:

试试这个:

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 函数:

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

【讨论】:

    【解决方案2】:

    创建一个calendar table,然后你可以简单地这样写:

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

    【讨论】:

      【解决方案3】:

      另一种方法

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-23
        • 2023-03-19
        • 2017-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-29
        相关资源
        最近更新 更多