Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come trovare l'ultimo giorno del mese in SQL Server

A partire da SQL Server 2012, EOMONTH() la funzione consente di trovare l'ultimo giorno di un dato mese. Accetta due argomenti; uno per la data di inizio e un argomento facoltativo per specificare quanti mesi aggiungere a tale data.

Questo articolo fornisce esempi che dimostrano come EOMONTH() funziona in SQL Server.

Sintassi

Innanzitutto, ecco la sintassi:

EOMONTH ( start_date [, month_to_add ] )

Dove start_date è la data per la quale vuoi trovare l'ultimo giorno del mese e month_to_add indica quanti mesi (se presenti) desideri aggiungere alla data di inizio.

Il EOMONTH() la funzione restituisce un valore nella data tipo di dati.

Esempio 1

Ecco un esempio di base per dimostrare come funziona:

SELECT EOMONTH( '2025-01-01' ) AS Result;

Risultato:

+------------+
| Result     |
|------------|
| 2025-01-31 |
+------------+

In questo caso, il nostro mese di inizio è gennaio, quindi il risultato ci mostra che l'ultimo giorno di gennaio è il 31.

Esempio 2:aggiungi un mese

Ecco un esempio di utilizzo di un secondo argomento per specificare quanti mesi aggiungere. In questo caso aggiungo un mese alla data di inizio:

SELECT EOMONTH( '2025-01-01', 1 ) AS Result;

Risultato:

+------------+
| Result     |
|------------|
| 2025-02-28 |
+------------+

E il risultato ci mostra l'ultimo giorno di febbraio. Questo perché abbiamo aggiunto un mese alla data di inizio.

Esempio 3 – Sottrai un mese

Puoi utilizzare un numero negativo per sottrarre uno o più mesi dalla data di inizio. In questo modo:

SELECT EOMONTH( '2025-01-01', -1 ) AS Result;

Risultato:

+------------+
| Result     |
|------------|
| 2024-12-31 |
+------------+

Esempio 4:utilizzo della data di sistema

Ecco un esempio di come ottenere la fine del mese dalla data corrente:

SELECT 
    SYSDATETIME() AS 'Current Date',
    EOMONTH( SYSDATETIME() ) AS 'End of Month';

Risultato:

+-----------------------------+----------------+
| Current Date                | End of Month   |
|-----------------------------+----------------|
| 2018-06-04 22:53:32.7694823 | 2018-06-30     |
+-----------------------------+----------------+

Come accennato, il EOMONTH() la funzione restituisce il suo valore nella data tipo di dati. Ecco perché il risultato in questo esempio mostra una discrepanza tra come viene visualizzata la data di inizio e come viene visualizzata la fine del mese.

In questo caso, la nostra data di inizio viene generata con SYSDATETIME() funzione, che restituisce il suo valore come datetime2(7) tipo di dati. Questo tipo di dati include la componente ora e la data. La data il tipo di dati include solo il componente data.

Puoi sempre formattare la data usando il FORMAT() funzione o utilizzare varie altre funzioni TSQL per estrarre varie parti della data.

Esempio 5:conto alla rovescia per la fine del mese

Puoi anche combinare EOMONTH() funzione con altre funzioni per ottenere il risultato desiderato.

Ecco un esempio che restituisce quanti giorni, ore, minuti e secondi mancano alla fine del mese:

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';

Risultato:

+----------------+---------+--------+---------+-----------+-----------+
| Current Date   | EOM     | Days   | Hours   | Minutes   | Seconds   |
|----------------+---------+--------+---------+-----------+-----------|
| 04 June        | 30 June | 26     | 601     | 36055     | 2163252   |
+----------------+---------+--------+---------+-----------+-----------+