2012-07-26 89 views

回答

0

它獲得當月的開始。它計算的月數自1900年1月,並在其上增加了1900年1月1日拿到當月開始

+0

我一直認爲將日期設置爲1會達到相同的結果,但更容易? – 2012-07-26 08:24:13

26

這會給你的第一個月給定日期

內選擇 select DATEDIFF(MONTH, 0, GETDATE())會給個月的數量從1900-01-01

這裏爲1350

這將被添加到1900-01-01,但只有幾個月

select DATEADD(MONTH,1350,0)將給出2012-07-01 00:00:00:00

這是當前月份的開始。

我認爲這是查找任何給定日期的月份開始的最有效方法。

0
The DATEDIFF will give you date diff in month from January 1 1900 to current date 
AND 
The DATEADD will add (DATEDIFF) results months to your last parameter of DATEADD 
0

DATEADD函數添加到您指定的日期的間隔。對於 例如,如果SalesOrderHeader表 所有訂單的到期日下跌3天,你可以用下面的 聲明獲得新的日期:

USE AdventureWorks; 
GO 
SELECT DATEADD(day, 3, DueDate) 
FROM Sales.SalesOrderHeader; 
GO 

的DATEDIFF函數計算期間在您指定的兩個日期中的第二天和第一天之間的日期部分 中。換句話說, 它找到兩個日期之間的時間間隔。結果是一個有符號整數 值等於日期部分中的date2 - date1。下面的查詢使用 日期2001年11月30日,並認爲,交貨期和日期之間經過 天數:

USE AdventureWorks; 
GO 
SELECT DATEDIFF(day, DueDate, 'Nov 30 2001') 
FROM Sales.SalesOrderHeader; 
GO 



SELECT DATEDIFF(year, '20051220', '20060101') 
SELECT DATEDIFF(month, '20051220', '20060101') 
SELECT DATEDIFF(day, '20051220', '20060101') 
3

DateDiff函數返回多少秒,月,年 - 無論間隔您在第一個日期(這裏是0)和第二個日期(這裏是當前日期)之間指定。

 DATEDIFF(MONTH, 0, '2-14-2014') --returns month. 0 is for 1/1/1900, and getdate is the current date 
    --(i used a set date bc dates will change as this post gets older). 
    result: 1381 

在我的工作中,我使用了2-14-2014的日期,它給了我自從1/1/1900起的1381個月數。我把1381到像這樣DATEADD函數...

 select Dateadd(MONTH, 1381, 0) 
    result: 2015-02-01 00:00:00.000 

基本上,它得到的第一天,無論是月在最裏面的公式的日期指定的。

我不得不想出的代碼更進一步,並從結果中減去1秒,以便在11:59:59得到月份的最後一天,就像這樣...

 select DATEADD(s, -1, '2015-02-01 00:00:00.000') 

公式都放在一起看起來是這樣的:

 DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1,0)) 

希望這可以幫助別人。 :)

相關問題