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

我需要获得SQL中作为date的月份的最后一天。 如果我有这个月的第一天,我可以做这样的事情:

DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1) 

但有谁知道如何推广它,所以我可以find任何给定date的月份的最后一天?

这是我的版本。 不需要string操作或转换,只需要每次调用DATEADDYEARMONTH函数:

 DECLARE @test DATETIME SET @test = GETDATE() -- or any other date SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1) 

从SQL Server 2012中,您可以使用EOMONTH函数。

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

 SELECT EOMONTH(@SomeDate) 

您可以通过使用DAY()函数来获取date:

 dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date))) 

根据这些陈述:

 SELECT DATEADD(MONTH, 1, @x) -- Add a month to the supplied date @x 

 SELECT DATEADD(DAY, 0 - DAY(@x), @x) -- Get last day of month previous to the supplied date @x 

如何添加一个月迄今@x,然后检索之前的月份的最后一天(即提供的date的月份的最后一天)

 DECLARE @x DATE = '20-Feb-2012' SELECT DAY(DATEADD(DAY, 0 - DAY(DATEADD(MONTH, 1, @x)), DATEADD(MONTH, 1, @x))) 

注意:这是使用SQL Server 2008 R2进行的testing

只要扩展一下你的公式:

 dateadd(day, -1, dateadd(month, 1, cast(month('5/15/2009') as varchar(2)) + '/1/' + cast(year('5/15/2009') as varchar(4))) 

我知道这是一个古老的问题,但这是另一种解决scheme,适合我

 SET @dtDate = "your date" DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dtDate)+1,0)) 

如果有人正在寻找不同的例子,这里是一个链接http://blog.sqlauthority.com/2007/08/18/sql-server-find-last-day-of-any-month-current-previous-next /

我希望这可以帮助别人。 stackoverflow岩石!

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

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

 DECLARE @currentDate DATE = GETDATE() SELECT EOMONTH (@currentDate) AS CurrentMonthED 

SQL查询来显示下个月的结束date

 DECLARE @currentDate DATE = GETDATE() SELECT EOMONTH (@currentDate, 1 ) AS NextMonthED 

使用SQL Server,这是另一种查找月份的最后一天的方法:

 SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE())) 

WinSQL获取上个月的最后一天(即今天是2017-02-09,返回2017-01-31:selectdateadd(day,-day(today()),today())

尝试运行以下查询,它会给你你想要的一切:)

 Declare @a date =dateadd(mm, Datediff(mm,0,getdate()),0) Print('First day of Current Month:') Print(@a) Print('') set @a = dateadd(mm, Datediff(mm,0,getdate())+1,-1) Print('Last day of Current Month:') Print(@a) Print('') Print('First day of Last Month:') set @a = dateadd(mm, Datediff(mm,0,getdate())-1,0) Print(@a) Print('') Print('Last day of Last Month:') set @a = dateadd(mm, Datediff(mm,0,getdate()),-1) Print(@a) Print('') Print('First day of Current Week:') set @a = dateadd(ww, Datediff(ww,0,getdate()),0) Print(@a) Print('') Print('Last day of Current Week:') set @a = dateadd(ww, Datediff(ww,0,getdate())+1,-1) Print(@a) Print('') Print('First day of Last Week:') set @a = dateadd(ww, Datediff(ww,0,getdate())-1,0) Print(@a) Print('') Print('Last day of Last Week:') set @a = dateadd(ww, Datediff(ww,0,getdate()),-1) Print(@a) 

WinSQL:我想返回上个月的所有logging:

 where DATE01 between dateadd(month,-1,dateadd(day,1,dateadd(day,-day(today()),today()))) and dateadd(day,-day(today()),today()) 

这也是一样的:

 where month(DATE01) = month(dateadd(month,-1,today())) and year(DATE01) = year(dateadd(month,-1,today())) 

我的2美分:

 select DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(day,(0-(DATEPART(dd,'2008-02-12')-1)),'2008-02-12'))) 

拉吉

如果你经常需要它,把它包装在一个非常快速的内联TVF中:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/06/21/calculating-third-wednesday-of-the-month-with-inline-udfs.aspx

使用SQL Server 2005,这对我工作:

 select dateadd(dd,-1,dateadd(mm,datediff(mm,0,YOUR_DATE)+1,0)) 

基本上,您从YOUR_DATE的(SQL Server)时间开始算起的月数。 然后添加一个来获得下个月的序列号。 然后,将这个月数加到0来得到下个月第一天的date。 然后,您减去一天即可抵达YOUR_DATE的最后一天。

这适用于我,使用Microsoft SQL Server 2005:

 DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'2009-05-01')+1,0)) 

取一些月份的第31个基准date,例如“20011231”。 然后使用
以下程序(我已经给出了以下3个相同的例子,只有@ DT值不同)。

 declare @dt datetime; set @dt = '20140312' SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231'); set @dt = '20140208' SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231'); set @dt = '20140405' SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231'); 

LAST_DAY函数很好地适用于此。

编辑:其实正如在评论中提到的可能不是所有的SQL。 我会离开这个post的人有可能find一个MySQL / Oracle的答案绊倒它。

从mysql参考手册 :

 LAST_DAY(date) 

获取date或date时间值,并返回该月份最后一天的相应值。 如果参数无效,则返回NULL。

 mysql> SELECT LAST_DAY('2003-02-05'); -> '2003-02-28' mysql> SELECT LAST_DAY('2004-02-05'); -> '2004-02-29' mysql> SELECT LAST_DAY('2004-01-01 01:01:01'); -> '2004-01-31' mysql> SELECT LAST_DAY('2003-03-32'); -> NULL 

LAST_DAY()从MySQL 4.1.1开始可用。