获取月份的SQL的最后一天获取月份的SQL的最后一天(Get the last day of the

2019-05-13 23:27发布

我需要给在SQL中的日期的月份的最后一天。 如果我有一个月的第一天,我可以做这样的事情:

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

但是,没有人知道如何来概括它,所以我可以找到该月的最后一天,对于任何给定日期?

Answer 1:

这里是我的版本。 没有字符串操作或铸件所需,每到只需一个电话DATEADDYEARMONTH功能:

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

SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)


Answer 2:

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

返回包含指定日期的月份的最后一天,有一个可选的偏移。

句法

EOMONTH ( start_date [, month_to_add ] ) 

如何...我能找到一个月的任何给定日期的最后一天?

SELECT EOMONTH(@SomeGivenDate)


Answer 3:

你可以通过使用获得的日期的天DAY()函数:

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


Answer 4:

我知道这是一个老问题,但这里是另一个解决方案,为我的作品

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 /

我希望这可以帮助别的人。 计算器岩石!!!!



Answer 5:

基于语句:

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,然后检索该月的最后一天,在这之前(即所提供的日期的月份的最后一天)

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

注:这是测试使用SQL Server 2008 R2



Answer 6:

只是延长您的公式了一点点:

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


Answer 7:

对于SQL Server 2012或以上使用EOMONTH获得一个月的最后日期

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

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

SQL查询,显示下个月的最后一天

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


Answer 8:

工程在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


Answer 9:

使用SQL Server,这里是另一种方式来找到月份的最后一天:

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


Answer 10:

WinSQL的拿到最后一个月的最后一天(即今天是2017年2月9日,返回2017年1月31日:选择DATEADD(天,天的(TODAY()),今日())



Answer 11:

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

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)


Answer 12:

WinSQL的:我想回到上个月的所有记录:

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()))


Answer 13:

我的2美分:

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

拉吉



Answer 14:

如果你需要经常,包装在一个内联TVF,这是非常快:

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



Answer 15:

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

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

基本上,你从(SQL Server)的时间YOUR_DATE开始得到的月数。 然后添加一个到它拿到下个月的序列号。 然后,你这个月数的增加比0拿到了那是下个月的第一天的日期。 从此你再减去每天去YOUR_DATE的最后一天。



Answer 16:

这对我的作品,使用Microsoft SQL Server 2005:

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


Answer 17:

花一些基准日是本月的一些如“20011231”的31日。 然后使用
以下步骤(I具有下面给出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');


Answer 18:

我写了下面的函数,它的工作原理。

它返回datetime数据类型。 零小时,分,秒,毫秒。

CREATE Function [dbo].[fn_GetLastDate]
(
    @date datetime
)
returns datetime
as
begin

declare @result datetime

 select @result = CHOOSE(month(@date),  
 DATEADD(DAY, 31 -day(@date), @date),
 IIF(YEAR(@date) % 4 = 0, DATEADD(DAY, 29 -day(@date), @date), DATEADD(DAY, 28 -day(@date), @date)), 
 DATEADD(DAY, 31 -day(@date), @date) ,
 DATEADD(DAY, 30 -day(@date), @date), 
 DATEADD(DAY, 31 -day(@date), @date),
 DATEADD(DAY, 30 -day(@date), @date), 
 DATEADD(DAY, 31 -day(@date), @date),
 DATEADD(DAY, 31 -day(@date), @date),
 DATEADD(DAY, 30 -day(@date), @date),
 DATEADD(DAY, 31 -day(@date), @date),
 DATEADD(DAY, 30 -day(@date), @date), 
 DATEADD(DAY, 31 -day(@date), @date))

 return convert(date, @result)

end

这是非常容易使用。 2例如:

select [dbo].[fn_GetLastDate]('2016-02-03 12:34:12')

select [dbo].[fn_GetLastDate](GETDATE())


Answer 19:

该查询也可使用。

DECLARE @SelectedDate DATE =  GETDATE()

SELECT DATEADD(DAY, - DAY(@SelectedDate), DATEADD(MONTH, 1 , @SelectedDate)) EndOfMonth


Answer 20:

---Start/End of previous Month 
Declare @StartDate datetime, @EndDate datetime

set @StartDate = DATEADD(month, DATEDIFF(month, 0, GETDATE())-1,0) 
set @EndDate = EOMONTH (DATEADD(month, DATEDIFF(month, 0, GETDATE())-1,0)) 

SELECT @StartDate,@EndDate


文章来源: Get the last day of the month in SQL