A partir de SQL Server 2012, EOMONTH()
función le permite encontrar el último día de cualquier mes dado. Acepta dos argumentos; uno para la fecha de inicio y un argumento opcional para especificar cuántos meses agregar a esa fecha.
Este artículo proporciona ejemplos que demuestran cómo EOMONTH()
funciona en SQL Server.
Sintaxis
Primero, aquí está la sintaxis:
EOMONTH ( start_date [, month_to_add ] )
Donde start_date
es la fecha para la que desea encontrar el último día del mes y month_to_add
es cuántos meses (si corresponde) le gustaría agregar a la fecha de inicio.
El EOMONTH()
la función devuelve un valor en la fecha tipo de datos.
Ejemplo 1
Aquí hay un ejemplo básico para demostrar cómo funciona:
SELECT EOMONTH( '2025-01-01' ) AS Result;
Resultado:
+------------+ | Result | |------------| | 2025-01-31 | +------------+
En este caso, nuestro mes de inicio es enero, por lo que el resultado nos muestra que el último día de enero es el 31.
Ejemplo 2:agregar un mes
Aquí hay un ejemplo del uso de un segundo argumento para especificar cuántos meses agregar. En este caso, agrego un mes a la fecha de inicio:
SELECT EOMONTH( '2025-01-01', 1 ) AS Result;
Resultado:
+------------+ | Result | |------------| | 2025-02-28 | +------------+
Y el resultado nos muestra el último día de febrero. Esto se debe a que agregamos un mes a la fecha de inicio.
Ejemplo 3:Resta un mes
Puede usar un número negativo para restar uno o más meses desde la fecha de inicio. Así:
SELECT EOMONTH( '2025-01-01', -1 ) AS Result;
Resultado:
+------------+ | Result | |------------| | 2024-12-31 | +------------+
Ejemplo 4:uso de la fecha del sistema
Este es un ejemplo de obtener el final del mes a partir de la fecha actual:
SELECT SYSDATETIME() AS 'Current Date', EOMONTH( SYSDATETIME() ) AS 'End of Month';
Resultado:
+-----------------------------+----------------+ | Current Date | End of Month | |-----------------------------+----------------| | 2018-06-04 22:53:32.7694823 | 2018-06-30 | +-----------------------------+----------------+
Como se mencionó, el EOMONTH()
la función devuelve su valor en la fecha tipo de datos. Es por eso que el resultado de este ejemplo muestra una discrepancia entre cómo se muestra la fecha de inicio y cómo se muestra el final del mes.
En este caso, nuestra fecha de inicio se genera con SYSDATETIME()
función, que devuelve su valor como datetime2(7) tipo de datos. Este tipo de datos incluye el componente de tiempo, así como la fecha. La fecha el tipo de datos solo incluye el componente de fecha.
Siempre puede formatear la fecha usando FORMAT()
o use varias otras funciones TSQL para extraer varias partes de la fecha.
Ejemplo 5:cuenta atrás para el final del mes
También puede combinar el EOMONTH()
función con otras funciones para lograr el resultado deseado.
Aquí hay un ejemplo que devuelve cuántos días, horas, minutos y segundos faltan para el final del mes:
SELECT FORMAT(SYSDATETIME(), 'dd MMMM') AS 'Current Date', FORMAT(EOMONTH( SYSDATETIME() ), 'dd MMMM') AS 'EOM', DATEDIFF(day, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Days', DATEDIFF(hour, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Hours', DATEDIFF(minute, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Minutes', DATEDIFF(second, SYSDATETIME(), EOMONTH( SYSDATETIME() )) AS 'Seconds';
Resultado:
+----------------+---------+--------+---------+-----------+-----------+ | Current Date | EOM | Days | Hours | Minutes | Seconds | |----------------+---------+--------+---------+-----------+-----------| | 04 June | 30 June | 26 | 601 | 36055 | 2163252 | +----------------+---------+--------+---------+-----------+-----------+