我需要给在SQL中的日期的月份的最后一天。 如果我有一个月的第一天,我可以做这样的事情:
DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)
但是,没有人知道如何来概括它,所以我可以找到该月的最后一天,对于任何给定日期?
我需要给在SQL中的日期的月份的最后一天。 如果我有一个月的第一天,我可以做这样的事情:
DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)
但是,没有人知道如何来概括它,所以我可以找到该月的最后一天,对于任何给定日期?
这里是我的版本。 没有字符串操作或铸件所需,每到只需一个电话DATEADD
, YEAR
和MONTH
功能:
DECLARE @test DATETIME
SET @test = GETDATE() -- or any other date
SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)
从SQL Server 2012中您可以使用EOMONTH函数。
返回包含指定日期的月份的最后一天,有一个可选的偏移。
句法
EOMONTH ( start_date [, month_to_add ] )
如何...我能找到一个月的任何给定日期的最后一天?
SELECT EOMONTH(@SomeGivenDate)
你可以通过使用获得的日期的天DAY()函数:
dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))
我知道这是一个老问题,但这里是另一个解决方案,为我的作品
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 /
我希望这可以帮助别的人。 计算器岩石!!!!
基于语句:
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
只是延长您的公式了一点点:
dateadd(day, -1,
dateadd(month, 1,
cast(month('5/15/2009') as varchar(2)) +
'/1/' +
cast(year('5/15/2009') as varchar(4)))
对于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
工程在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
使用SQL Server,这里是另一种方式来找到月份的最后一天:
SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE()))
WinSQL的拿到最后一个月的最后一天(即今天是2017年2月9日,返回2017年1月31日:选择DATEADD(天,天的(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的:我想回到上个月的所有记录:
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))
基本上,你从(SQL Server)的时间YOUR_DATE开始得到的月数。 然后添加一个到它拿到下个月的序列号。 然后,你这个月数的增加比0拿到了那是下个月的第一天的日期。 从此你再减去每天去YOUR_DATE的最后一天。
这对我的作品,使用Microsoft SQL Server 2005:
DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'2009-05-01')+1,0))
花一些基准日是本月的一些如“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');
我写了下面的函数,它的工作原理。
它返回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())
该查询也可使用。
DECLARE @SelectedDate DATE = GETDATE()
SELECT DATEADD(DAY, - DAY(@SelectedDate), DATEADD(MONTH, 1 , @SelectedDate)) EndOfMonth
---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