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

时间:2014-10-30 11:06:55

标签: sql sql-server sql-server-2008

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

我这样称呼函数:

exec ufngetLastDateOfMonth('2014-10-15')  

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

exec ufngetLastDateOfMonth('2014-10-31')

它返回'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

6 个答案:

答案 0 :(得分:7)

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

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,'2014-08-12')+1,0))

添加到您的功能:

select @New_date = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@date)+1,0))

来源:

SQL SERVER – Find Last Day of Any Month – Current Previous Next

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

转到本月的第一天。加一个月。然后减去一天。或者,在你的情况下,一秒钟:

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

如果您希望将此字符串作为字符串,则应使用convert()。我建议该函数返回datetime

答案 3 :(得分:1)

使用此

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);

OR

SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,0,GETDATE()),-1);

答案 4 :(得分:0)

你可以试试这个

select DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, GETDATE()) + 1, 0)) As EndDateOfCurrentMonth

或者

select DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) As StartDateOfCurrentMonth

答案 5 :(得分:0)

试试这个:

SELECT EOMONTH('2000/2/1') Last_Date

注意: EOMONTH功能在 SQL Server版本> = 2012

中可用