我在Oracle中使用了LAST_DAY() function,如下所示:
Last_Day( to_date( '$pay_first_day' , 'YYYY-mm-dd') )
在SQL Server 2008 R2数据库中我需要做些什么来实现相同的结果?
答案 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