我创建了一个存储在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
答案 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
答案 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)