¿Nunca has tenido la necesidad de saber cuándo es el primer día del mes y el último de un mes en concreto? Bueno, pues a mí si me ha pasado y resulta que en Microsoft SQL no tenemos ninguna función integrada que nos dé dicha información. Y es por eso de este blog hoy.
Manos a la obra
Lo vamos a manejar como una función de SQL que nos va a devolver una tabla con 1 fila y 2 columnas. La primera columna será el primer día del mes y la segunda columna contendrá el último día del mes. Para ello necesitaremos 2 valores, el año y el mes. ¿Y por qué el año? Bueno, podríamos utilizar siempre el año actual, pero entonces, si queremos saber qué día de la semana es, pues entonces es mejor también pasar el año. Además de la posibilidad de los años bisiestos, que el último día del mes de febrero podría cambiar de ser un 28 a un 29.
El código, la verdad, es muy simple y creo no necesita más explicación que la que ya he explicado en el párrafo anterior.
El código
CREATE FUNCTION GetMonthRange
(
@Year INT,
@Month INT
)
RETURNS TABLE
AS
RETURN
(
-- ============================================================
-- Author:
-- Create date: <04 Jan 2024>
-- Description:
-- How to use:
-- Example usage:
-- DECLARE @Year INT = 2023;
-- DECLARE @Month INT = 3;
-- SELECT FirstDayOfMonth, LastDayOfMonth
-- FROM dbo.GetMonthRange(@Year, @Month);
-- ============================================================
SELECT
DATEFROMPARTS(@Year, @Month, 1) AS FirstDayOfMonth,
EOMONTH(DATEFROMPARTS(@Year, @Month, 1)) AS LastDayOfMonth
);
Y para llamar a esta función se puede hacer de la siguiente manera.
--primera opcion
select * from dbo.GetMonthRange(2024, 2)
--segunda opcion
declare @first_date date
declare @last_date date
select @first_date = FirstDayOfMonth, @last_date = LastDayOfMonth from dbo.GetMonthRange(2024, 2)
select @first_date first_date, @last_date last_date
Y eso es todo amigos, espero que este pequeño truco de SQL os haya gustado.