3
SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0),
'First Day of Current Month'

今月の最初の日を取得するためにこのクエリがどのように機能するか教えてもらえますか?

4

5 に答える 5

5

DATEADD/DATEDIFF

このパターンは、さまざまな効果を実現するために使用できます。一般的なパターンは次のとおりです。

DATEADD(part,DATEDIFF(part,x,z),y)

ここpartで、は日付の同じコンポーネントであり、x通常yは定数であり、z調整する日付です。

xとが同じy定数に設定されている場合、要素を超えたすべてのコンポーネントを削除し、それらのコンポーネントをからの対応するコンポーネントに置き換える効果があります。(と同じように扱われます)zparty01900-01-01T00:00:00

したがって、SELECT Dateadd(month, Datediff(month, 0, Getdate()), 0)現在の日付(z= )を取得し、 (およびすべての時間コンポーネント)をGetDate()超えたそれらの部分を。からの対応する部分に置き換えます。monthday1900-01-01T00:00:00

今日の始まりを得るには、次を使用します。

DATEADD(day,DATEDIFF(day,0,GETDATE()),0)

xこのパターンがより面白くなるのは、とyが等しくない場合に「オフセット」効果を達成するために使用できることです。たとえば、先月の最終日を取得するには、次のようにします。

DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20001231')

ここでは、との実際の値はそれほど重要ではxありません。y重要なのはそれらの間の関係です。

于 2012-06-15T06:33:24.387 に答える
5

まず、

Datediff(month、0、Getdate())は、1900年からの合計月数を示します

1900年以降、上記の月から返された月を追加すると、月の最初の日付が取得されます。

例:今月を取る場合

Datediff(month、0、Getdate())=1349か月

また、「1900/01/01」に1349か月を追加すると、今月の最初の日付「2012/06/01」が取得されます。

于 2012-06-15T06:23:57.047 に答える
0

これが必要だと思います。今月の最初の日の名前と番号が表示されます。

SELECT DatePart(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate())) FirstDayNumber
     , DateName(DW,DATEADD(DD,-DAY(GetDate())+1,GetDate()))  FirstDayName
于 2012-06-15T06:37:19.250 に答える
0

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

于 2013-10-28T10:48:35.693 に答える
0

私は以下を使用しました:

DATEADD(DAY, (-1 * DATEPART(DAY,GetDate()) + 1), GetDate() )

基本的に、現在の日付に負の日数 + 1 を追加しています。

于 2014-02-04T22:18:11.007 に答える