我需要将当月的最后一天作为SQL中的日期。如果我有这个月的第一天,我可以这样做:
DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)
但是有谁知道如何概括它以便我可以找到任何给定日期的月份的最后一天?
答案 0 :(得分:57)
这是我的版本。无需字符串操作或强制转换,只需对DATEADD
,YEAR
和MONTH
函数进行一次调用:
DECLARE @test DATETIME
SET @test = GETDATE() -- or any other date
SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)
答案 1 :(得分:56)
从SQL Server 2012,您可以使用EOMONTH功能。
返回包含指定日期的月份的最后一天, 带有可选的偏移量。
<强>语法强>
EOMONTH ( start_date [, month_to_add ] )
如何...我可以找到任何指定日期的月份的最后一天?
SELECT EOMONTH(@SomeGivenDate)
答案 2 :(得分:13)
您可以使用DAY()功能获取日期:
dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))
答案 3 :(得分: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/
我希望这有助于其他人。 stackoverflow Rocks !!!!
答案 4 :(得分:3)
基于陈述:
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进行测试
答案 5 :(得分:2)
稍等一下你的公式:
dateadd(day, -1,
dateadd(month, 1,
cast(month('5/15/2009') as varchar(2)) +
'/1/' +
cast(year('5/15/2009') as varchar(4)))
答案 6 :(得分:2)
在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
答案 7 :(得分:2)
对于SQL Server 2012或更高版本,请使用 EOMONTH to get the last date of month
显示当月结束日期的SQL查询
DECLARE @currentDate DATE = GETDATE()
SELECT EOMONTH (@currentDate) AS CurrentMonthED
显示下个月结束日期的SQL查询
DECLARE @currentDate DATE = GETDATE()
SELECT EOMONTH (@currentDate, 1 ) AS NextMonthED
答案 8 :(得分:1)
使用SQL Server,这是查找每月最后一天的另一种方法:
SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE()))
答案 9 :(得分:1)
答案 10 :(得分:1)
尝试运行以下查询,它会为您提供所需的一切:)
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)
答案 11 :(得分:1)
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()))
答案 12 :(得分:0)
基于下面链接中投票率最高的答案,我提出了以下解决方案:
declare @mydate date= '2020-11-09';
SELECT DATEADD(month, DATEDIFF(month, 0, @mydate)+1, -1) AS lastOfMonth
答案 13 :(得分:0)
也可以使用此查询。
DECLARE @SelectedDate DATE = GETDATE()
SELECT DATEADD(DAY, - DAY(@SelectedDate), DATEADD(MONTH, 1 , @SelectedDate)) EndOfMonth
答案 14 :(得分:0)
我写了以下功能,它有效。
返回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())
答案 15 :(得分:0)
取一些基准日期,即某个月的第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');
答案 16 :(得分:0)
这适用于我,使用Microsoft SQL Server 2005:
DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'2009-05-01')+1,0))
答案 17 :(得分:0)
使用sql server 2005,这对我有用:
select dateadd(dd,-1,dateadd(mm,datediff(mm,0,YOUR_DATE)+1,0))
基本上,您从YOUR_DATE的(SQL Server)时间开始获得月数。然后添加一个以获取下个月的序列号。然后将此月数添加到0以获取下个月第一天的日期。然后,您可以从中减去一天以到达YOUR_DATE的最后一天。
答案 18 :(得分:0)
如果您经常需要它,请将其包装在内联TVF中,速度非常快:
答案 19 :(得分:0)
我的2美分:
select DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(day,(0-(DATEPART(dd,'2008-02-12')-1)),'2008-02-12')))
拉吉
答案 20 :(得分:-1)
---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