Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择每月的第一天和最后一天。_Sql_Sql Server_Tsql_Datetime - Fatal编程技术网

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和