2017-07-17 69 views
1

我在查詢中遇到這樣的:DATEDIFF(DD ...返回月份數據

[date_start] >= DATEADD(dd, -DAY(GETDATE()) + 1, DATEDIFF(dd, 0, GETDATE())) 

我明白,這是部分去除該領域的時間因素,但有人可以解釋我如何在不使用「月」功能的情況下返回當前月份數據?

+0

有一個在參數密切關注。當你從current_date減去當前日期時,你會得到上個月的最後一天:'2017-7-17 - 17 = 2017-06-31'。並且這減去一個:'2017-07-17 - (17-1)= 2017-07-01' – dnoeth

+0

該公式旨在獲取當前月份的第一個日期...扣除當前日期並添加1天以開始月 – maSTAShuFu

回答

0

需要當月的當前日期(日(GetDate())+ 1)並從自日起的整個天數中減去它0.

[Date_start] >= 
DATEADD(dd, --Add Integer X to DateTime Y 

-DAY(GETDATE()) + 1, --X = - Current Day of Month + 1 

DATEDIFF(dd, 0, GETDATE()) --Y = The number of days between day 0 and now. 
          --(in whole days to round out the 'time' part of the datetime) 

沒有標準功能來實現這一點。

此致不大於我見過的其它方法少得多的直觀的,雖然在迄今使用負數添加()是混亂的,因爲是在datediff()的結果的依賴被隱式地從intdatetime轉換。

其他方法在這裏:SQL Server Helper - Date Functions

+1

理解任何查詢的好建議是將其分解成它的組成部分。運行'SELECT -DAY(GETDATE())+ 1,DATEDIFF(dd,0,GETDATE())',你會看到發生了什麼。 – JeffUK

+0

謝謝你,我期待的簡潔的答案。運行選擇也是一個很好的提示,我沒有想到這樣做。非常感激 – jada91

相關問題