Получить последний день месяца в SQL - PullRequest
42 голосов
/ 27 июня 2009

Мне нужно получить последний день месяца, указанный в SQL в качестве даты. Если у меня первый день месяца, я могу сделать что-то вроде этого:

DATEADD(DAY, DATEADD(MONTH,'2009-05-01',1), -1)

Но кто-нибудь знает, как обобщить это, чтобы я мог найти последний день месяца для любой данной даты?

Ответы [ 20 ]

1 голос
/ 01 апреля 2014

Используя SQL Server, вот еще один способ найти последний день месяца:

SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE()))
1 голос
/ 09 февраля 2017

WinSQL, чтобы получить последний день прошлого месяца (то есть сегодня 2017-02-09, возвращает 2017-01-31: Выберите дату и число (день, день (сегодня ()), сегодня ())

0 голосов
/ 20 декабря 2017

Я написал следующую функцию, она работает.

Возвращает тип данных 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())
0 голосов
/ 18 сентября 2014

Возьмите некоторую базовую дату, которая является 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');
0 голосов
/ 27 июня 2009

Мои 2 цента:

select DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(day,(0-(DATEPART(dd,'2008-02-12')-1)),'2008-02-12')))

Raj

0 голосов
/ 02 ноября 2018

Этот запрос также может быть использован.

DECLARE @SelectedDate DATE =  GETDATE()

SELECT DATEADD(DAY, - DAY(@SelectedDate), DATEADD(MONTH, 1 , @SelectedDate)) EndOfMonth
0 голосов
/ 20 мая 2013

с использованием SQL Server 2005, это работает для меня:

select dateadd(dd,-1,dateadd(mm,datediff(mm,0,YOUR_DATE)+1,0))

Как правило, вы получаете количество месяцев с начала (SQL Server) времени для YOUR_DATE. Затем добавьте один к нему, чтобы получить порядковый номер следующего месяца. Затем вы добавляете это количество месяцев к 0, чтобы получить дату, которая является первым днем ​​следующего месяца. Из этого вы затем вычитаете день, чтобы добраться до последнего дня YOUR_DATE.

0 голосов
/ 27 июня 2009

Если вам это нужно часто, оберните его во встроенный TVF, что очень быстро:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/06/21/calculating-third-wednesday-of-the-month-with-inline-udfs.aspx ,

0 голосов
/ 15 января 2019
---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
0 голосов
/ 08 июля 2014

Это работает для меня, используя Microsoft SQL Server 2005:

DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'2009-05-01')+1,0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...