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

Come ottenere l'ultimo giorno del mese in T-SQL

Problema:

Vorresti trovare l'ultimo giorno del mese per una data specifica in T-SQL.

Esempio:

Il nostro database ha una tabella denominata Furniture con i dati nelle colonne Id , Name e PurchaseDate .

Id Nome Data di acquisto
1 divano 10-02-2019
2 scrivania 01-04-2019
3 libreria 20-05-2019

Prendiamo i nomi dei prodotti e le date di acquisto e l'ultimo giorno del mese in cui sono stati acquistati questi articoli.

Soluzione:

Useremo la funzione EOMONTH() per trovare l'ultimo giorno del mese.

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate) AS LastDayDate
FROM Furniture;

Ecco il risultato della query:

Nome Data di acquisto LastDayDate
divano 2019-02-10 2019-02-28
scrivania 2019-04-01 2019-04-30
libreria 2019-05-20 2019-05-31

Discussione:

Se si desidera ottenere la data contenente l'ultimo giorno del mese di una data data, utilizzare la funzione EOMONTH(). Questa funzione accetta un argomento obbligatorio:una data (o data e ora), che può essere una colonna data/ora o un'espressione che restituisce una data. (Nel nostro esempio, utilizziamo PurchaseDate colonna.)

EOMONTH() restituisce l'ultimo giorno dello stesso mese dell'argomento. La query precedente per il divano con data di acquisto "2019-02-10" restituisce "2019-02-28"; a febbraio 2019, l'ultimo giorno del mese era il 28.

Se vuoi restituire l'ultimo giorno del secondo, terzo, ecc. mese da una data data, usa il secondo argomento facoltativo di EOMONTH():il numero di mesi da aggiungere. Guarda l'esempio:

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,1) AS LastDayDate
FROM Furniture;

Ecco il risultato della query:

Nome Data di acquisto LastDayDate
divano 2019-02 -10 2019-03 -30
scrivania 2019-04 -01 2019-05 -31
libreria 2019-05 -20 2019-06 -30

Per il divano con data di acquisto "2019-02-10", questa query restituisce "2019-03-30", l'ultimo giorno del successivo mese. Abbiamo aggiunto un mese alla fine del mese corrente.

Se desideri trovare l'ultimo giorno del mese prima un dato mese, usa un valore negativo (es. '-1') come secondo argomento:

SELECT Name,
	 PurchaseDate,
	 EOMONTH(PurchaseDate,-1) AS LastDayDate
FROM Furniture;

Ecco il risultato della query:

Nome Data di acquisto LastDayDate
divano 2019-02 -10 2019-01 -31
scrivania 2019-04 -01 2019-03 -31
libreria 2019-05 -20 2019-04 -30