3

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

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

我必须在 SQL Server 2008 R2 数据库中做什么才能获得相同的结果?

4

5 回答 5

7

试试这个——

DECLARE @Date DATETIME
SELECT @Date = GETDATE()

SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @Date) + 1, 0) - 1
于 2013-04-29T11:46:51.913 回答
3

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

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

例如

select EOMONTH('01/07/2018')  

会回来

2018-01-31
于 2019-01-07T16:19:52.720 回答
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

-- 注意:如果这对您有更好的帮助,请标记为答案。

于 2013-12-13T04:18:43.520 回答
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

于 2013-04-29T11:33:18.050 回答
-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
于 2013-04-29T11:39:33.203 回答