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的最佳方法?
问候,
尼克
答
转换@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
答
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中已被其他人回答的第一个月的日期
由于getdate()是datetime,所以你的查询也会返回datetime。一种方法是将结果转换为日期,然后转换为varchar并手动添加时间,或者可以使用datepart和dateadd获得相同的结果。 – glaeran 2015-02-10 14:02:53
FWIW,'23:59:59.000'不是一个月内的最后一次。你可能会错过一些数据。 – 2015-02-10 14:09:17
http://*.com/questions/113045/how-to-return-the-date-part-only-from-a-sql-server-datetime-datatype – 2015-02-10 14:12:27