una ultimo ultima obtener month mes listar last first fecha eomonth dias day calcular año sql sql-server tsql

ultimo - sql server last day of month



Obtenga el último día del mes en SQL (18)

Necesito obtener el último día del mes como una fecha en SQL. Si tengo el primer día del mes, puedo hacer algo como esto:

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

Pero, ¿alguien sabe cómo generalizarlo para que pueda encontrar el último día del mes para una fecha determinada?


Aquí está mi versión. No se requiere manipulación o fundición de cadenas, solo una llamada a las DATEADD , YEAR y MONTH :

DECLARE @test DATETIME SET @test = GETDATE() -- or any other date SELECT DATEADD(month, ((YEAR(@test) - 1900) * 12) + MONTH(@test), -1)


Basado en las declaraciones:

SELECT DATEADD(MONTH, 1, @x) -- Add a month to the supplied date @x

y

SELECT DATEADD(DAY, 0 - DAY(@x), @x) -- Get last day of month previous to the supplied date @x

¿Qué tal si agregamos un mes hasta la fecha @x y luego recuperamos el último día del mes anterior a ese (es decir, el último día del mes de la fecha provista)?

DECLARE @x DATE = ''20-Feb-2012'' SELECT DAY(DATEADD(DAY, 0 - DAY(DATEADD(MONTH, 1, @x)), DATEADD(MONTH, 1, @x)))

Nota: Esta fue una prueba usando SQL Server 2008 R2


Desde SQL Server 2012 puede usar la función EOMONTH .

Devuelve el último día del mes que contiene la fecha especificada, con un desplazamiento opcional.

Sintaxis

EOMONTH ( start_date [, month_to_add ] )

¿Cómo ... puedo encontrar el último día del mes para una fecha determinada?

SELECT EOMONTH(@SomeGivenDate)


Escribí la siguiente función, funciona.

Devuelve el tipo de datos de fecha y hora. Cero hora, minuto, segundo, milisegundos.

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

Es muy fácil de usar. 2 ejemplo:

select [dbo].[fn_GetLastDate](''2016-02-03 12:34:12'') select [dbo].[fn_GetLastDate](GETDATE())


Esto funciona para mí, usando Microsoft SQL Server 2005:

DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,''2009-05-01'')+1,0))


Intenta ejecutar la siguiente consulta, te dará todo lo que quieras :)

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)


La función LAST_DAY funciona muy bien para esto.

Editar: En realidad, como se menciona en los comentarios, probablemente no sea así para todos los SQL. Dejaré la publicación en la posibilidad de que alguien que esté buscando una respuesta MySQL / Oracle tropiece con ella.

Del manual de referencia de mysql :

LAST_DAY(date)

Toma un valor de fecha o de fecha y hora y devuelve el valor correspondiente para el último día del mes. Devuelve NULL si el argumento no es válido.

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 () está disponible a partir de MySQL 4.1.1.


Mis 2 centavos:

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

Raj


Para SQL Server 2012 o superior use EOMONTH para obtener la última fecha del mes

Consulta SQL para mostrar la fecha de finalización del mes actual

DECLARE @currentDate DATE = GETDATE() SELECT EOMONTH (@currentDate) AS CurrentMonthED

Consulta SQL para mostrar la fecha de finalización del mes siguiente

DECLARE @currentDate DATE = GETDATE() SELECT EOMONTH (@currentDate, 1 ) AS NextMonthED


Puede obtener los días de la fecha utilizando la función DAY() :

dateadd(day, -1, dateadd(month, 1, dateadd(day, 1 - day(date), date)))




Solo extienda su fórmula un poco:

dateadd(day, -1, dateadd(month, 1, cast(month(''5/15/2009'') as varchar(2)) + ''/1/'' + cast(year(''5/15/2009'') as varchar(4)))


Tome una fecha base que es el 31 de algún mes, por ejemplo, ''20011231''. Luego usa el
siguiente procedimiento (He dado 3 ejemplos idénticos a continuación, solo difiere el valor @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'');


Usando SQL Server, aquí hay otra forma de encontrar el último día del mes:

SELECT DATEADD(MONTH,1,GETDATE())- day(DATEADD(MONTH,1,GETDATE()))


WinSQL para obtener el último día del último mes (es decir, hoy es 2017-02-09, devoluciones 2017-01-31: Seleccione dateadd (día, -día (hoy ()), hoy ())


WinSQL: quería devolver todos los registros del mes pasado:

where DATE01 between dateadd(month,-1,dateadd(day,1,dateadd(day,-day(today()),today()))) and dateadd(day,-day(today()),today())

Esto hace lo mismo:

where month(DATE01) = month(dateadd(month,-1,today())) and year(DATE01) = year(dateadd(month,-1,today()))


usando sql server 2005, esto funciona para mí:

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

Básicamente, obtienes la cantidad de meses desde el comienzo del tiempo (SQL Server) para YOUR_DATE. Luego, agregue uno para obtener el número de secuencia del próximo mes. Luego, agregue este número de meses a 0 para obtener una fecha que sea el primer día del mes siguiente. A partir de esto, resta un día para llegar al último día de YOUR_DATE.