什么是SQL Server 2008中Oracle的LAST_DAY()函数的等价物?

时间:2013-04-29 11:27:34

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

我在Oracle中使用了LAST_DAY() function,如下所示:

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

在SQL Server 2008 R2数据库中我需要做些什么来实现相同的结果?

5 个答案:

答案 0 :(得分:6)

试试这个 -

DECLARE @Date DATETIME
SELECT @Date = GETDATE()

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

答案 1 :(得分: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

- 注意:如果这对你有所帮助,那么请标记为答案。

答案 2 :(得分:1)

SQL Server 2012引入了一个新的日期函数EOMONTH,该函数返回包含指定日期的月份的最后一天,并带有可选的偏移量。

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

例如

select EOMONTH('01/07/2018')  
     

会返回

2018-01-31

答案 3 :(得分:0)

请你试试这个,它应该按预期工作:

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

如果您的'2013-02-28 00:00:00.000'在二月份,它将返回与此格式相同的给定日期的最后一天:$pay_first_day如果您'2013-04-30 00:00:00.000',则会返回$pay_first_day是在四月。

答案 4 :(得分:-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