SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'
今月の最初の日を取得するためにこのクエリがどのように機能するか教えてもらえますか?
SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'
今月の最初の日を取得するためにこのクエリがどのように機能するか教えてもらえますか?
このパターンは、さまざまな効果を実現するために使用できます。一般的なパターンは次のとおりです。
DATEADD(part,DATEDIFF(part,x,z),y)
ここpart
で、は日付の同じコンポーネントであり、x
通常y
は定数であり、z
調整する日付です。
x
とが同じy
定数に設定されている場合、要素を超えたすべてのコンポーネントを削除し、それらのコンポーネントをからの対応するコンポーネントに置き換える効果があります。(と同じように扱われます)z
part
y
0
1900-01-01T00:00:00
したがって、SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0)
現在の日付(z
= )を取得し、 (およびすべての時間コンポーネント)をGetDate()
超えたそれらの部分を。からの対応する部分に置き換えます。month
day
1900-01-01T00:00:00
今日の始まりを得るには、次を使用します。
DATEADD(day,DATEDIFF(day,0,GETDATE()),0)
x
このパターンがより面白くなるのは、とy
が等しくない場合に「オフセット」効果を達成するために使用できることです。たとえば、先月の最終日を取得するには、次のようにします。
DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20001231')
ここでは、との実際の値はそれほど重要ではx
ありません。y
重要なのはそれらの間の関係です。
まず、
Datediff(month、0、Getdate())は、1900年からの合計月数を示します
1900年以降、上記の月から返された月を追加すると、月の最初の日付が取得されます。
例:今月を取る場合
Datediff(month、0、Getdate())=1349か月
また、「1900/01/01」に1349か月を追加すると、今月の最初の日付「2012/06/01」が取得されます。
これが必要だと思います。今月の最初の日の名前と番号が表示されます。
SELECT DatePart(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayNumber
, DateName(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayName
select DATEADD(MM,datediff(month,0,getdate()),0) first_day_of_month
行く
select DATEADD(mm,datediff(month,0,getdate())+1,0)-1 last_day_of_currentmonth
私は以下を使用しました:
DATEADD(DAY, (-1 * DATEPART(DAY,GetDate()) + 1), GetDate() )
基本的に、現在の日付に負の日数 + 1 を追加しています。