SQL SELECT每月的第一天和最后一天。

问题描述:

最有价值的专业人士,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://*.com/questions/113045/how-to-return-the-date-part-only-from-a-sql-server-datetime-datatype – 2015-02-10 14:12:27

转换@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

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 

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

EOMONTH (start_date [, month_to_add ]) 

msdn

更多细节 -

的话题:我偶然发现了这个问题寻找SQL中已被其他人回答的第一个月的日期