web-dev-qa-db-ja.com

SQL Server 2005は、任意の年の任意の月の最初と最後の日付を取得します

1か月をint(1〜12)として、1年をintとして受け入れるストアドプロシージャがあります。これら2つの値を考慮して、その月の日付範囲を決定する必要があります。そのため、その月の最初の日を表すdatetime変数と、その月の最後の日を表すもう1つのdatetime変数が必要です。この情報を取得するかなり簡単な方法はありますか?

11
Ristogod
DECLARE @Month int
DECLARE @Year int

set @Month = 2
set @Year = 2004

select DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) /*First*/

select DATEADD(day,-1,DATEADD(month,@Month,DATEADD(year,@Year-1900,0))) /*Last*/

しかし、月の最終日の時間コンポーネントとして何が必要ですか?日時に午前0時以外の時間コンポーネントがある場合は、次のようなことをするほうがよいでしょう。

WHERE COL >= DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) 
     AND COL < DATEADD(month,@Month,DATEADD(year,@Year-1900,0)) 

このようにして、最終的にSQL Server 2008およびより精度の高い日時データ型に移行した場合でも、コードは機能し続けます。

16
Martin Smith

その月の最初の日:SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)

月の最終日:SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0))

GETDATE()をDateTime変数値に置き換えます。

私はそれをずっと前に この非常に便利なページ から取得しました。これには、「今週の月曜日」や「月の最初の月曜日」など、他の日付計算がたくさんあります。

20
DOK
DECLARE @Month  int = 3, @Year  int = 2016
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME

-- First date of month
SET @StartDate = DATEADD(MONTH, @Month-1, DATEADD(YEAR, @Year-1900, 0));
-- Last date of month
SET @EndDate = DATEADD(SS, -1, DATEADD(MONTH, @Month, DATEADD(YEAR, @Year-1900, 0)))

これは、時間コンポーネントを含む最初の日付と最後の日付を返します。

2
Lalesh Mishra
DECLARE @Month int;
DECLARE @Year int;
DECLARE @FirstDayOfMonth DateTime;
DECLARE @LastDayOfMonth DateTime;

SET @Month = 3
SET @Year = 2010

SET @FirstDayOfMonth = CONVERT(datetime, CAST(@Month as varchar) + '/01/' + CAST(@Year as varchar));
SET @LastDayOfMonth = DATEADD(month, 1, CONVERT(datetime, CAST(@Month as varchar)+ '/01/' + CAST(@Year as varchar))) - 1;
2
John Hartsock

今月の最終日:

select dateadd(dd,-day(dateadd(mm,1,getdate())),dateadd(mm,1,getdate()))

当月の最初の日付:

select dateadd(dd,-day(getdate())+1,getdate())
2
patrudu
DECLARE @Month INTEGER
DECLARE @Year INTEGER
SET @Month = 10
SET @Year = 2010

DECLARE @FirstDayOfMonth DATETIME
DECLARE @LastDayOfMonth DATETIME

SET @FirstDayOfMonth = Str(@Year) + RIGHT('0' + Str(@Month), 2) + '01'
SET @LastDayOfMonth = DATEADD(dd, -1, DATEADD(mm, 1, @FirstDayOfMOnth))
SELECT @FirstDayOfMonth, @LastDayOfMonth
2
AdaTheDev

これを試して:

Declare @month int, @year int;
Declare @first DateTime, @last DateTime;
Set @month=10;
Set @year=2010;
Set @first=CAST(CAST(@year AS varchar) + '-' + CAST(@month AS varchar) + '-' + '1' AS DATETIME);
Set @last=DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@first)+1,0));

SELECT @first,@last;
2
Tim Schmelter
select [FirstDay Of The Month] as Text ,convert(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 'Date'
union all
select [LastDay Of The Month], convert(varchar,dateadd(d,-day(getdate()),dateadd(m,1,getdate())),106)
2
Crash