如何获取SQL Server 2008月份的最后日期

如何获取SQL Server 2008月份的最后日期,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我创建了一个存储在MicrosoftSQLServer2008中的函数“ufngetFirstDateOfMonth”和“ufngetLastDateOfMonth”。我的目的是向函数中发送一些日期,它将返回月份的第一个日期和“00:00:00”,或者返回月份的最后一个日期和“23:59:59” 我这样调用函数: exec ufngetLastDateOfMonth('2014-10-15') 通常它会返回“2014-10-31 23:59:59” 但当我发送有31天的月份的最后日期(8月

我创建了一个存储在MicrosoftSQLServer2008中的函数“ufngetFirstDateOfMonth”和“ufngetLastDateOfMonth”。我的目的是向函数中发送一些日期,它将返回月份的第一个日期和“00:00:00”,或者返回月份的最后一个日期和“23:59:59”

我这样调用函数:

exec ufngetLastDateOfMonth('2014-10-15')  
通常它会返回“2014-10-31 23:59:59”
但当我发送有31天的月份的最后日期(8月、1月……)时:

它返回“2014-10-30 23:59:59”,这实际上是不正确的,应该是“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
select @New_date = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@date)+1,0))

去一个月的第一天。加上一个月。然后减去一天。或者,在您的情况下,一秒钟:

select @New_date = dateadd(second, -1, dateadd(month, 1, dateadd(day, -(DAY(@Date) + 1)) ) )

如果希望将其作为字符串,则应使用
convert()
。相反,我建议函数返回一个
datetime

来获取最后一天,您可以这样做:

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,'2014-08-12')+1,0))
添加到您的函数中:

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
select @New_date = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@date)+1,0))
资料来源:

使用这个

DECLARE @curdate datetime;
SET @curdate = GETDATE(); -- you can pass your date here
--SET @curdate = '2014-10-15'; Example
SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,0,@curdate),-1);


对于使用SQL Server 2012的用户,
EOMONTH
功能可能是一种替代方法

DECLARE @date DATETIME = '12/1/2011';
SELECT EOMONTH ( @date ) AS Result;
GO
来源:

你可以试试这个

select DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, GETDATE()) + 1, 0)) As EndDateOfCurrentMonth
还是这个

select DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) As StartDateOfCurrentMonth
试试这个:

SELECT EOMONTH('2000/2/1') Last_Date
注意:功能在SQL Server版本>=2012中可用

关于“月的最后一天是下个月1日的前一天”怎么办<代码>EOMOUNT()?不确定sql server 2008EOMONTH()中是否需要sql server2012@HardikPatel
EOMONTH()
is 2012+这是2008年的要求: