SQL SELECT第一天和本月的最后一天.

NCo*_*sTE 2 sql t-sql sql-server 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))) 
Run Code Online (Sandbox Code Playgroud)

自2015年2月起,我希望得到以下结果:

@FirstDOM = 2015-02-01 00:00:00.000
@LastDOM = 2015-02-28 23:59:59.000
Run Code Online (Sandbox Code Playgroud)

@LastDOM是正确的,但我没有得到@FirstDOM的时间戳部分的零,我得到了正确的日期,但是我运行脚本的时间.说它是早上8:50,我得到:

2015-02-01 08:50:49.160
Run Code Online (Sandbox Code Playgroud)

解决这个小麻烦的最佳方法是什么?

问候,

缺口

小智 6

您可以使用以下命令获取该月的第一天和最后一天:

SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)  ----First Day
SELECT DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)) ----Last Day
Run Code Online (Sandbox Code Playgroud)


小智 5

将@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
Run Code Online (Sandbox Code Playgroud)

我希望这个能帮上忙!

谢谢,

交换尼


Sur*_*ngh 5

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
Run Code Online (Sandbox Code Playgroud)


Joe*_*ano 5

除了其他答案之外,自 SQL-Server 2012 以来,微软还提供了

EOMONTH ( start_date [, month_to_add ] )  
Run Code Online (Sandbox Code Playgroud)

更多详细信息请参见msdn

--

主题:我偶然发现了这个问题,正在寻找 SQL 中的第一天,其他人已经回答了这个问题