server sql 本月最后一天_sql server-在SQL中获取每月的最后一天

在SQL Server中,有多种方法可以找到指定日期所在月份的最后一天。例如,使用`DATEADD`和`DATEDIFF`函数组合,或者利用`EOMONTH`函数(SQL Server 2012及以上版本)。这些方法可以有效地计算任何给定日期的月份末尾日期。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值