sql server-在SQL中获取每月的最后一天
我需要获取SQL中指定的月份的最后一天。 如果我有每月的第一天,则可以执行以下操作:
DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)
但是,有谁知道如何将其推广,以便我可以找到任何给定日期的月的最后一天?
20个解决方案
60 votes
这是我的版本。 不需要字符串操作或强制转换,只需对2932523377510310319104、YEAR和293252337751031919106函数进行一次调用:
DECLARE @test DATETIME
SET @test = GETDATE() -- or any other date
SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)
LukeH answered 2020-06-21T08:55:19Z
60 votes
在SQL Server 2012中,可以使用EOMONTH函数。
返回包含指定日期的月份的最后一天, 带有可选的偏移量。
句法
EOMONTH ( start_date [, month_to_add ] )
如何找到某个给定日期的月的最后一天?
SELECT EOMONTH(@SomeGivenDate)
Martin Smith answered 2020-06-21T08:55:52Z
13 votes
您可以使用DAY()函数获取日期中的日期:
dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))
jamuraa answered 2020-06-21T08:56:12Z
4 votes
我知道这是一个老问题,但这是另一种对我有用的解决方案
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- 下一个/]
我希望这可以帮助其他人。堆栈溢出岩石!!!
Moy answered 2020-06-21T08:56:41Z
3 votes
根据声明:
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进行的测试
Stu answered 2020-06-21T08:57:14Z
3 votes
在SQL Server中工作
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
Sri answered 2020-06-21T08:57:34Z
2 votes
只需稍微扩展一下公式即可:
dateadd(day, -1,
dateadd(month, 1,
cast(month('5/15/2009') as varchar(2)) +
'/1/' +
cast(year('5/15/2009') as varchar(4)))
Eric answered 2020-06-21T08:57:54Z
2 votes
对于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
Satinder singh answered 2020-06-21T08:58:22Z
1 votes
使用SQL Server,这是查找月份的最后一天的另一种方法:
SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE()))
Trilok answered 2020-06-21T08:58:42Z
1 votes
WinSQL获取上个月的最后一天(即今天是2017-02-09,返回2017-01-31: 选择dateadd(day,-day(today()),today())
David answered 2020-06-21T08:59:03Z
1 votes
尝试运行以下查询,它将为您提供所需的一切:)
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)
LONG answered 2020-06-21T08:59:23Z
1 votes
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()))
David answered 2020-06-21T08:59:47Z
0 votes
我的2美分:
select DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(day,(0-(DATEPART(dd,'2008-02-12')-1)),'2008-02-12')))
拉吉
Raj answered 2020-06-21T09:00:11Z
0 votes
如果您经常需要它,可以将其包装在内联TVF中,这非常快:
[HTTP://SQL blog.com/blogs/Alexander_Kuznets哦V/archive/2009/06/21/calculating-third-Wednesday-of-他和-month-with-inline-UD法师.aspx],
A-K answered 2020-06-21T09:00:36Z
0 votes
使用sql server 2005,这对我有用:
select dateadd(dd,-1,dateadd(mm,datediff(mm,0,YOUR_DATE)+1,0))
基本上,您可以从(SQL Server)时间开始获得YOUR_DATE的月份数。 然后向其添加一个以获得下个月的序列号。 然后,您可以将此月份数添加到0,以获取下个月第一天的日期。 然后,您从中减去一天以达到YOUR_DATE的最后一天。
Peter Perháč answered 2020-06-21T09:01:01Z
0 votes
使用Microsoft SQL Server 2005,这对我有用:
DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'2009-05-01')+1,0))
Aulia answered 2020-06-21T09:01:21Z
0 votes
以某个月31号为基准日期,例如 '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');
peter.petrov answered 2020-06-21T09:01:46Z
0 votes
我写了下面的功能,它的工作原理。
它返回日期时间数据类型。 零时,分,秒,毫秒。
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())
Başar Kaya answered 2020-06-21T09:02:15Z
0 votes
也可以使用此查询。
DECLARE @SelectedDate DATE = GETDATE()
SELECT DATEADD(DAY, - DAY(@SelectedDate), DATEADD(MONTH, 1 , @SelectedDate)) EndOfMonth
Serkan Arslan answered 2020-06-21T09:02:35Z
-1 votes
---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
radouans answered 2020-06-21T09:02:50Z