sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo encontrar el último día del mes en SQL Server

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   |
+----------------+---------+--------+---------+-----------+-----------+