Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como encontrar o último dia do mês no SQL Server


A partir do SQL Server 2012, o EOMONTH() função permite que você encontre o último dia de qualquer mês. Ele aceita dois argumentos; um para a data de início e um argumento opcional para especificar quantos meses adicionar a essa data.

Este artigo fornece exemplos que demonstram como EOMONTH() funciona no SQL Server.


Sintaxe


Primeiro, aqui está a sintaxe:
EOMONTH ( start_date [, month_to_add ] )

Onde start_date é a data para a qual você deseja encontrar o último dia do mês e month_to_add é quantos meses (se houver) você gostaria de adicionar à data de início.

O EOMONTH() função retorna um valor na data tipo de dados.

Exemplo 1


Aqui está um exemplo básico para demonstrar como funciona:
SELECT EOMONTH( '2025-01-01' ) AS Result;

Resultado:
+------------+
| Result     |
|------------|
| 2025-01-31 |
+------------+

Nesse caso, nosso mês de início é janeiro, então o resultado nos mostra que o último dia de janeiro é 31.

Exemplo 2 – Adicionar um mês


Aqui está um exemplo de uso de um segundo argumento para especificar quantos meses adicionar. Nesse caso, adiciono um mês à data de início:
SELECT EOMONTH( '2025-01-01', 1 ) AS Result;

Resultado:
+------------+
| Result     |
|------------|
| 2025-02-28 |
+------------+

E o resultado nos mostra o último dia de fevereiro. Isso ocorre porque adicionamos um mês à data de início.

Exemplo 3 – Subtrair um mês


Você pode usar um número negativo para subtrair um ou mais meses da data de início. Assim:
SELECT EOMONTH( '2025-01-01', -1 ) AS Result;

Resultado:
+------------+
| Result     |
|------------|
| 2024-12-31 |
+------------+

Exemplo 4 – Usando a data do sistema


Aqui está um exemplo de como obter o final do mês a partir da data atual:
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 mencionado, o EOMONTH() função retorna seu valor na data tipo de dados. É por isso que o resultado neste exemplo mostra uma discrepância entre como a data de início é exibida e como o final do mês é exibido.

Neste caso, nossa data de início é gerada com o SYSDATETIME() função, que retorna seu valor como um datetime2(7) tipo de dados. Esse tipo de dados inclui o componente de tempo, bem como a data. A data tipo de dados inclui apenas o componente de data.

Você sempre pode formatar a data usando o FORMAT() ou use várias outras funções TSQL para extrair várias partes da data.

Exemplo 5 – Contagem regressiva para o final do mês


Você também pode combinar o EOMONTH() função com outras funções para alcançar um resultado desejado.

Aqui está um exemplo que retorna quantos dias, horas, minutos e segundos até o final do mês:
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   |
+----------------+---------+--------+---------+-----------+-----------+