我需要获取在SQL中作为日期给出的月份的最后一天。如果我有一个月的第一天,我可以做这样的事情:在SQL中获取每月的最后一天
DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)
但没有人知道如何来概括它,所以我可以找到该月的最后一天,对于任何给定日期?
我需要获取在SQL中作为日期给出的月份的最后一天。如果我有一个月的第一天,我可以做这样的事情:在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)
只需扩展您的公式了一点点:
dateadd(day, -1,
dateadd(month, 1,
cast(month('5/15/2009') as varchar(2)) +
'/1/' +
cast(year('5/15/2009') as varchar(4)))
的LAST_DAY函数工作得很好这一点。
编辑:其实正如评论中提到的,这可能不适用于所有的SQL。我将离开帖子,希望有人在寻找MySQL/Oracle的答案时磕磕绊绊。
LAST_DAY(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起可用。
你可以通过使用DAY()功能得到日期的日子:
dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))
我的2美分:
select DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(day,(0-(DATEPART(dd,'2008-02-12')-1)),'2008-02-12')))
拉吉
从SQL Server 2012中,您可以使用EOMONTH函数。
返回包含指定日期的月的最后一天, 带有可选偏移量。
语法
EOMONTH (start_date [, month_to_add ])
我如何......能找到一个月的最后一天任何给定的日期?
SELECT EOMONTH(@SomeGivenDate)
基于语句:
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
使用SQL Server 2005,这个工作对我来说:
select dateadd(dd,-1,dateadd(mm,datediff(mm,0,YOUR_DATE)+1,0))
基本上,你从(SQL服务器年初获得的月数)时间为YOUR_DATE。然后添加一个来获得下个月的序列号。然后将这个月数加到0来得到下个月第一天的日期。然后,您减去一天即可抵达YOUR_DATE的最后一天。
使用SQL Server,这里是另一种方式来发现我们每月的最后一天:
SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE()))
我知道这是一个老问题,但这里是为我的作品
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岩石!
这个工作对我来说,使用Microsoft SQL Server 2005:
DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'2009-05-01')+1,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');
WinSQL获取上个月的最后一天(即,e今天是2017-02-09,回复2017-01-31: 选择dateadd(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的:我想回到所有记录上个月:
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()))
对于SQL服务器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
我写了下面的功能,它的工作原理。
它返回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())
刚刚oracle呢? – 2009-06-26 22:14:22
-1:LAST_DAY不是T-SQL。不过,它在Oracle和MySQL中可用。 – Eric 2009-06-26 22:14:23
在SQL Server中? (标签) – 2009-06-26 22:14:42