2015-02-10 594 views
2

最有價值的專業人士,SQL SELECT每月的第一天和最後一天。

我有一個查詢內置來獲取本月的第一天和最後一天,但我有一個月的第一天的時間戳的問題。

declare @FirstDOM datetime, @LastDOM datetime 

set @FirstDOM = (select dateadd(dd,-(day(getdate())-1),getdate())) 
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 

因爲它是2015年2月,我希望得到的結果:

@FirstDOM = 2015-02-01 00:00:00.000 
@LastDOM = 2015-02-28 23:59:59.000 

@LastDOM是正確的,但我沒有收到對@FirstDOM的時間戳部分的零,我得到正確的日期,但我運行腳本的時間。說它是上午8點50分,我得到:

2015-02-01 08:50:49.160 

什麼是解決這個小snafu的最佳方法?

問候,

尼克

+1

由於getdate()是datetime,所以你的查詢也會返回datetime。一種方法是將結果轉換爲日期,然後轉換爲varchar並手動添加時間,或者可以使用datepart和dateadd獲得相同的結果。 – glaeran 2015-02-10 14:02:53

+2

FWIW,'23:59:59.000'不是一個月內的最後一次。你可能會錯過一些數據。 – 2015-02-10 14:09:17

+0

http://stackoverflow.com/questions/113045/how-to-return-the-date-part-only-from-a-sql-server-datetime-datatype – 2015-02-10 14:12:27

回答

4

轉換@FirstDOM到DATE如下:

declare @FirstDOM datetime, @LastDOM datetime 

set @FirstDOM = (select CONVERT(DATE,dateadd(dd,-(day(getdate())-1),getdate()))) 
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 
SELECT @FirstDOM,@LastDOM 

我希望這將有助於!

感謝,

Swapnil

+0

這將只返回沒有日期,作者希望它在日期時間。 – glaeran 2015-02-10 14:20:39

+0

作者希望FirstDOM的時間戳記爲「00:00:00」。將其轉換爲DATE將實現相同。 – Swapnil 2015-02-10 14:26:17

4
declare @FirstDOM datetime, @LastDOM datetime 

set @FirstDOM = (select dateadd(d,-1,dateadd(mm,datediff(m,0,getdate()),1))) 
set @LastDOM = (select dateadd(s,-1,dateadd(mm,datediff(m,0,getdate())+1,0))) 
Print @FirstDOM 
Print @LastDOM 
1

除了其他的答案,因爲SQL-Server 2012中,微軟提供了

EOMONTH (start_date [, month_to_add ]) 

msdn

更多細節 -

的話題:我偶然發現了這個問題尋找SQL中已被其他人回答的第一個月的日期

相關問題