sql >> Base de Datos >  >> RDS >> Database

Cómo obtener el último día del mes en T-SQL

Problema:

Le gustaría encontrar el último día del mes para una fecha específica en T-SQL.

Ejemplo:

Nuestra base de datos tiene una tabla llamada Furniture con datos en las columnas Id , Name y PurchaseDate .

Id Nombre Fecha de compra
1 sofá 2019-02-10
2 escritorio 2019-04-01
3 estantería 2019-05-20

Obtengamos los nombres de los productos y las fechas de compra y el último día del mes en que se compraron estos artículos.

Solución:

Usaremos la función EOMONTH() para encontrar el último día del mes.

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate) AS LastDayDate
FROM Furniture;

Este es el resultado de la consulta:

Nombre Fecha de compra FechaÚltimoDía
sofá 2019-02-10 2019-02-28
escritorio 2019-04-01 2019-04-30
librería 2019-05-20 2019-05-31

Discusión:

Si desea obtener la fecha que contiene el último día del mes de una fecha determinada, utilice la función EOMONTH(). Esta función toma un argumento obligatorio:una fecha (o fecha y hora), que puede ser una columna de fecha/fechahora o una expresión que devuelve una fecha. (En nuestro ejemplo, usamos PurchaseDate columna.)

EOMONTH() devuelve el último día del mismo mes que el argumento. La consulta anterior para el sofá con la fecha de compra '2019-02-10' devuelve '2019-02-28'; en febrero de 2019, el último día del mes fue el 28.

Si desea devolver el último día del segundo, tercer, etc. mes a partir de una fecha dada, use el segundo argumento opcional de EOMONTH():el número de meses a agregar. Mira el ejemplo:

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,1) AS LastDayDate
FROM Furniture;

Este es el resultado de la consulta:

Nombre Fecha de compra FechaÚltimoDía
sofá 2019-02 -10 2019-03 -30
escritorio 2019-04 -01 2019-05 -31
librería 2019-05 -20 2019-06 -30

Para el sofá con la fecha de compra "2019-02-10", esta consulta devuelve "2019-03-30":el último día del siguiente mes. Hemos agregado un mes al final del mes actual.

Si desea buscar el último día del mes anterior un mes dado, use un valor negativo (por ejemplo, '-1') como segundo argumento:

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,-1) AS LastDayDate
FROM Furniture;

Este es el resultado de la consulta:

Nombre Fecha de compra FechaÚltimoDía
sofá 2019-02 -10 2019-01 -31
escritorio 2019-04 -01 2019-03 -31
librería 2019-05 -20 2019-04 -30