重複の可能性:
2 つの日付の間の月
私は結果をもたらす必要があります.2つの日付の間の月は何月ですか.
例えば。日付が
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
重複の可能性:
2 つの日付の間の月
私は結果をもたらす必要があります.2つの日付の間の月は何月ですか.
例えば。日付が
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
これを試してください:
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
calendar tableを作成すると、次のように簡単に記述できます。
select distinct MonthName
from dbo.Calendar
where BaseDate between @StartDate and @EndDate
別の方法
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