SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth
大家好,我有一个查询来查找当前月份的最后一天,它肯定可以正常工作,但我无法理解它,因为我有其他类似的要求并需要相应地进行更改。
有人能给我解释一下吗? 提前感谢。
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
LastDay_CurrentMonth
大家好,我有一个查询来查找当前月份的最后一天,它肯定可以正常工作,但我无法理解它,因为我有其他类似的要求并需要相应地进行更改。
有人能给我解释一下吗? 提前感谢。
获取当前时间的日期时间。
GETDATE() -- 2011-09-15 13:45:00.923
计算距离'1900-01-01'的月份差异
DATEDIFF(m, 0, GETDATE()) -- 1340
将差异添加到“1900-01-01”,再加一个月
DATEADD(m, DATEDIFF(m, 0, GETDATE())+1, 0) -- 2011-10-01 00:00:00.000
去掉一秒钟
DATEADD(s, -1, DATEADD(m, DATEDIFF(m, 0, GETDATE())+1, 0)) -- 2011-09-30 23:59:59.000
SELECT EOMONTH (GETDATE());
。 :-) - marc_sEOMONTH
将返回午夜的最后一天。人们认为这会使他们的报告查询变得神奇,但我认为如果他们使用BETWEEN
和/或不进行相应调整,许多人会惊讶地发现缺少了一整天的数据(假设有时间组件)。 - Aaron BertrandEODAY()
函数吗? :-) - marc_sSELECT
DATEPART
(DD,EOMONTH(GETDATE()))
AS '当前月份的最后一天'
这里使用DATEPART
函数来打印日期的整数部分。如果要求日期的名称,则需要使用DATENAME()
函数。
在查询中,最后一天表示月底,因此我们使用了EOMONTH()
函数。
GETDATE()
用于表示当前月份。
CREATE FUNCTION EOMONTH
(
@date datetime,
@months int
)
RETURNS datetime
AS
BEGIN
declare @eom datetime
declare @d datetime
set @d = dateadd(MONTH, @months, @date)
select @eom = dateadd(SECOND,-1,DATEADD(MONTH,datediff(MONTH,0,@d)+1,0))
RETURN @eom
END
GO
SECOND
和MONTH
而不是使用s
、mm
和m
...使代码更加自我记录。 - Aaron Bertrand