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 - 查找任何月份的最后一天 - 当前上一页下一页
对于使用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