如何获取SQL Server 2008的最后一个月份

Pha*_*rat 8 sql sql-server sql-server-2008

我创建了一个存储在Microsoft SQL Server 2008中的函数"ufngetFirstDateOfMonth"和"ufngetLastDateOfMonth".我的目的是向函数发送一些日期,它将返回"00:00:00"或者最后一个日期的月份的第一个日期. '23:59:59'的一个月.

我把这个函数称为:

exec ufngetLastDateOfMonth('2014-10-15')  
Run Code Online (Sandbox Code Playgroud)

通常它会返回'2014-10-31 23:59:59'
但是当我发送有31天(8月,1月,...)的月份的最后日期时:

exec ufngetLastDateOfMonth('2014-10-31')
Run Code Online (Sandbox Code Playgroud)

它返回'2014-10-30 23:59:59'whick不正确实际上,应该是'2014-10-31 23:59:59'

这里出了点问题......

这是我的功能:

CREATE FUNCTION [dbo].[ufnLastDateOfMonth](@Date date)
RETURNS varchar(50)

AS
BEGIN

DECLARE @New_Date varchar(50)

select @New_date = cast(dateadd(dd,-(DAY(@Date )),DATEADD(mm,1,@Date ))as varchar(50)) + ' 23:59:59'

RETURN @New_Date

END
Run Code Online (Sandbox Code Playgroud)

Tan*_*ner 10

要获得最后一天,您可以这样做:

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,'2014-08-12')+1,0))
Run Code Online (Sandbox Code Playgroud)

添加到您的功能:

select @New_date = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@date)+1,0))
Run Code Online (Sandbox Code Playgroud)

资源:

SQL SERVER - 查找任何月份的最后一天 - 当前上一页下一页


Sya*_*man 5

对于使用SQL Server 2012的用户, EOMONTH功能可以作为替代。

DECLARE @date DATETIME = '12/1/2011';
SELECT EOMONTH ( @date ) AS Result;
GO
Run Code Online (Sandbox Code Playgroud)

来源:https : //msdn.microsoft.com/en-us/library/hh213020.aspx