在SQL中获取该月的最后一天

Byr*_*ock 46 sql t-sql sql-server

我需要在SQL中将日期的最后一天作为日期给出.如果我有一个月的第一天,我可以这样做:

DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)
Run Code Online (Sandbox Code Playgroud)

但有没有人知道如何推广它所以我可以找到任何给定日期的月份的最后一天?

Mar*_*ith 61

从SQL Server 2012,您可以使用EOMONTH功能.

返回包含指定日期的月份的最后一天,并带有可选的偏移量.

句法

EOMONTH ( start_date [, month_to_add ] ) 
Run Code Online (Sandbox Code Playgroud)

怎么......我可以找到任何特定日期的月份的最后一天?

SELECT EOMONTH(@SomeGivenDate)
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 60

这是我的版本.不需要字符串操作或转换,只需要一次调用DATEADD,YEAR并且MONTH函数:

DECLARE @test DATETIME
SET @test = GETDATE()  -- or any other date

SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用 SQL Server >= 2012,则使用 E​​OMONTH (请参阅 Martin Smith 的回答) (2认同)

jam*_*raa 13

您可以使用DAY()函数获取日期中的日期:

dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))
Run Code Online (Sandbox Code Playgroud)


Sat*_*ngh 5

对于 SQL Server 2012 或更高版本,使用 EOMONTH 获取月份的最后一个日期

SQL查询显示当前月份的结束日期

DECLARE @currentDate DATE = GETDATE()
SELECT EOMONTH (@currentDate) AS CurrentMonthED
Run Code Online (Sandbox Code Playgroud)

SQL查询显示下个月的结束日期

DECLARE @currentDate DATE = GETDATE()
SELECT EOMONTH (@currentDate, 1 ) AS NextMonthED
Run Code Online (Sandbox Code Playgroud)


Sri*_*Sri 5

在 SQL 服务器中工作

Declare @GivenDate datetime
SET @GivenDate = GETDATE()

Select DATEADD(MM,DATEDIFF(MM, 0, @GivenDate),0) --First day of the month 

Select DATEADD(MM,DATEDIFF(MM, -1, @GivenDate),-1) --Last day of the month
Run Code Online (Sandbox Code Playgroud)