我在 Oracle中使用了LAST_DAY() 函数,如下所示:
Last_Day( to_date( '$pay_first_day' , 'YYYY-mm-dd') )
我必须在 SQL Server 2008 R2 数据库中做什么才能获得相同的结果?
我在 Oracle中使用了LAST_DAY() 函数,如下所示:
Last_Day( to_date( '$pay_first_day' , 'YYYY-mm-dd') )
我必须在 SQL Server 2008 R2 数据库中做什么才能获得相同的结果?
试试这个——
DECLARE @Date DATETIME
SELECT @Date = GETDATE()
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @Date) + 1, 0) - 1
SQL Server 2012 引入了一个名为 EOMONTH 的新日期函数,它返回包含指定日期的月份的最后一天,并带有可选的偏移量。
EOMONTH ( <start_date> [, <month_to_add> ] )
例如
select EOMONTH('01/07/2018')
会回来
2018-01-31
-- 将答案包装在一个函数中以实现无缝转换。
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
-- 注意:如果这对您有更好的帮助,请标记为答案。
你能试试这个吗,它应该可以按预期工作:
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
这是开始和月底的两个 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