Проблем:
Искате да намерите последния ден от месеца за конкретна дата в T-SQL.
Пример:
Нашата база данни има таблица с име Furniture
с данни в колоните Id
, Name
и PurchaseDate
.
Id | Име | Дата на покупка |
---|---|---|
1 | диван | 10.02.2019 |
2 | бюро | 01.04.2019 |
3 | библиотечка | 20.05.2019 |
Нека получим имената на продуктите и датите на покупка и последния ден от месеца, когато тези артикули са закупени.
Решение:
Ще използваме функцията EOMONTH(), за да намерим последния ден от месеца.
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate) AS LastDayDate FROM Furniture;
Ето резултата от заявката:
Име | Дата на покупка | LastDayDate |
---|---|---|
диван | 2019-02-10 | 2019-02-28 |
бюро | 2019-04-01 | 2019-04-30 |
библиотечка | 2019-05-20 | 2019-05-31 |
Дискусия:
Ако искате да получите датата, съдържаща последния ден от месеца на дадена дата, използвайте функцията EOMONTH(). Тази функция приема един задължителен аргумент:дата (или дата и час), която може да бъде колона дата/дата и час или израз, който връща дата. (В нашия пример използваме PurchaseDate
колона.)
EOMONTH() връща последния ден от същия месец като аргумента. Горната заявка за дивана с дата на покупка „2019-02-10“ връща „2019-02-28“; през февруари 2019 г., последният ден от месеца беше 28-ми.
Ако искате да върнете последния ден от втория, третия и т.н. месец от дадена дата, използвайте незадължителния втори аргумент на EOMONTH():броят на месеците за добавяне. Вижте примера:
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,1) AS LastDayDate FROM Furniture;
Ето резултата от заявката:
Име | Дата на покупка | LastDayDate |
---|---|---|
диван | 2019-02 -10 | 2019-03 -30 |
бюро | 2019-04 -01 | 2019-05 -31 |
библиотечка | 2019-05 -20 | 2019-06 -30 |
За дивана с дата на покупка „2019-02-10“ тази заявка връща „2019-03-30“ – последния ден от следващия месец. Добавихме един месец към края на текущия месец.
Ако искате да намерите последния ден от месеца преди даден месец, използвайте отрицателна стойност (напр. „-1“) като втори аргумент:
SELECT Name, PurchaseDate, EOMONTH(PurchaseDate,-1) AS LastDayDate FROM Furniture;
Ето резултата от заявката:
Име | Дата на покупка | LastDayDate |
---|---|---|
диван | 2019-02 -10 | 2019-01 -31 |
бюро | 2019-04 -01 | 2019-03 -31 |
библиотечка | 2019-05 -20 | 2019-04 -30 |