2016-10-31 165 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 

0作爲datediff()函數中的參數的用途是什麼?SQL中每月的一週

+0

這是舊fashione d在月初獲取日期的方法。 –

+0

之前先要求在谷歌搜索 – 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