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 |