2016-10-31 7 views
1
DECLARE @date DATETIME= GETDATE() 

SELECT DATEDIFF(WEEK, 
       DATEADD(WEEK, 
         DATEDIFF(WEEK, 0, 
            DATEADD(MONTH, DATEDIFF(MONTH, 0, @date), 0)), 
         0), @date - 1) + 1 

datediff()関数のパラメータとして0の目的は何ですか?今月のSQLで

+0

これは古いfashioneです月の初めに日付を取得する方法です。 –

+0

まずGoogleで検索を依頼する前に – Vitorlui

+2

叫んでいるタイトルのある別のSQLの質問?これは何ですか?! – Biffen

答えて

1

あなたの質問に具体的な答えが0月の初めを取得するだけの方法であるということである。

dateadd(month, datediff(month, 0, @date), 0) 

それが提供していないので、これは、SQL Serverでこれを行うための一つの方法であります「日付切り捨て」機能。私が好む:

dateadd(day, 1 - day(@date), @date) 

@dateは時間成分を有する場合には確かに、これはほんの少し複雑ですが。)

ただし、これを行うにははるかに簡単な方法は次のとおりです。

select (day(@date) - 1)/7) as week_of_month 
0

以下は、基準点からの月数を取得する

datediff(month, 0, @date) 

月の最初の日に到達するために戻って基準日に追加する

DATEADD(月、 DateDiff関数(月、0、@date)、 0)

は、だから、最初の日を見つけるために使用されます現在の月の

宣言@date日時= GETDATE()

select 
    getdate(), 
    datediff(month, 0, @date), 
    dateadd(month, 
      datediff(month, 0, @date), 
      0) 

enter image description here

関連する問題