如何获取SQL Server 2008月份的最后日期
我创建了一个存储在MicrosoftSQLServer2008中的函数“ufngetFirstDateOfMonth”和“ufngetLastDateOfMonth”。我的目的是向函数中发送一些日期,它将返回月份的第一个日期和“00:00:00”,或者返回月份的最后一个日期和“23:59:59” 我这样调用函数:如何获取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月
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@HardikPatelEOMONTH()
is 2012+这是2008年的要求: