SQL Server 2008中与Oracle的LAST_DAY()函数相当的是什么?

3

我曾在Oracle中使用LAST_DAY()函数,用法如下:

Last_Day( to_date( '$pay_first_day' , 'YYYY-mm-dd') )

我该怎么在SQL Server 2008 R2数据库中实现同样的结果呢?

5个回答

7
尝试这个 -
DECLARE @Date DATETIME
SELECT @Date = GETDATE()

SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @Date) + 1, 0) - 1

3

SQL Server 2012引入了一个新的日期函数,称为EOMONTH,它返回包含指定日期的月份的最后一天,还可以选择性地添加偏移量。

EOMONTH ( <start_date> [, <month_to_add> ] )

For instance

select EOMONTH('01/07/2018')  

Would return

2018-01-31

1

-- 为了实现无缝过渡,将答案包装在一个函数中。

CREATE FUNCTION [dbo].[LAST_DAY]
(
    @inDate DATETIME
)
RETURNS DATETIME
AS
BEGIN
    RETURN DATEADD(MONTH, DATEDIFF(MONTH, 0, @inDate) + 1, 0) - 1
END
-- TO TEST:  SELECT dbo.LAST_DAY(getDate()) as LastDayOfThisMonth

-- 注意:如果这篇文章对您有所帮助,请将其标记为答案,而不是之前的那篇。


0

请尝试一下这个,它应该按预期工作:

SELECT DATEADD (DAY, -1, DATEADD (MONTH, DATEDIFF (MONTH, 0, '$pay_first_day') + 1, 0))

如果你的$pay_first_day在二月,它将返回给定日期相应的最后一天,格式为:'2013-02-28 00:00:00.000';如果你的$pay_first_day在四月,它将返回'2013-04-30 00:00:00.000'


对我来说非常有帮助,感谢你的努力。 - Zahid Khan

-1

这里有两个用于获取月初和月末的UDF函数。

CREATE FUNCTION dbo.End_of_month (@Date datetime)  
RETURNS datetime AS  
BEGIN 
     DECLARE @ret datetime
     SET @Ret=DATEADD(DAY,-DAY(@Date)+1,@Date);
     SET @Ret=DATEADD(Month,1,@Ret);
     SET @Ret=DATEADD(Day,-1,@Ret);
     RETURN(@Ret)
END

CREATE FUNCTION dbo.Begin_of_month (@Date datetime)  
RETURNS datetime AS  
BEGIN 
     DECLARE @ret datetime
     SET @Ret=DATEADD(DAY,-DAY(@Date)+1,@Date);
     RETURN(@Ret)
END

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接