SQL选择每月的第一天和最后一天。
最亲爱的专业人士 我创建了一个查询来获取当月的第一天和最后一天,但是我遇到了一个问题,时间戳是当月第一天的SQL选择每月的第一天和最后一天。,sql,sql-server,tsql,datetime,Sql,Sql Server,Tsql,Datetime,最亲爱的专业人士 我创建了一个查询来获取当月的第一天和最后一天,但是我遇到了一个问题,时间戳是当月第一天的 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))) 由
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
解决这个小麻烦的最好办法是什么
问候,
尼克将@FirstDOM转换为
日期
,如下所示:
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除了其他答案外,自SQL Server 2012以来,微软提供
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
EOMONTH ( start_date [, month_to_add ] )
更多详情
--
主题:我无意中发现了这个问题,在SQL中查找已被其他人回答的每月第一天您可以使用以下方法获得每月的第一天和最后一天:
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) ----First Day
SELECT DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)) ----Last Day
因为getdate()是datetime,所以查询也将返回datetime。一种方法是将结果转换为date,然后转换为varchar并手动添加时间,或者您可以使用datepart&dateadd.FWIW获得相同的结果,“23:59:59.000”不是一个月内的最后一刻。这样可能会丢失一些数据。如果您使用的是datetimes之类的连续数据,则几乎总是最好使用半开放时间间隔(包括起点和终点)-您需要计算的值往往更容易找到,而且更容易验证您是否意外地在多个范围或无范围中包含特定值,其中范围是排他性的和详尽的。那么,切换到使用
=@FirstDOM和
对你有用吗?@Damien_不信者,正如你所建议的那样,这对我最有效。(>=FirstDOM和