sql >> Databáze >  >> RDS >> Database

Jak získat poslední den v měsíci v T-SQL

Problém:

Chcete najít poslední den v měsíci pro konkrétní datum v T-SQL.

Příklad:

Naše databáze obsahuje tabulku s názvem Furniture s údaji ve sloupcích Id , Name a PurchaseDate .

Id Jméno Datum nákupu
1 pohovka 2019-02-10
2 stůl 2019-04-01
3 knihovna 20.05.2019

Pojďme získat názvy produktů a data nákupu a poslední den v měsíci, kdy byly tyto položky zakoupeny.

Řešení:

K vyhledání posledního dne v měsíci použijeme funkci EOMONTH().

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

Zde je výsledek dotazu:

Jméno Datum nákupu LastDayDate
pohovka 2019-02-10 2019-02-28
stůl 2019-04-01 2019-04-30
knihovna 2019-05-20 2019-05-31

Diskuse:

Pokud chcete získat datum obsahující poslední den měsíce daného data, použijte funkci EOMONTH(). Tato funkce přebírá jeden povinný argument:datum (nebo datum a čas), což může být sloupec datum/datum a čas nebo výraz, který vrací datum. (V našem příkladu používáme PurchaseDate sloupec.)

EOMONTH() vrátí poslední den stejného měsíce jako argument. Výše uvedený dotaz na pohovku s datem nákupu ‚2019-02-10‘ vrací ‚2019-02-28‘; v únoru 2019 byl poslední den v měsíci 28.

Pokud chcete vrátit poslední den druhého, třetího atd. měsíce od daného data, použijte volitelný druhý argument EOMONTH():počet měsíců, které se mají přidat. Podívejte se na příklad:

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

Zde je výsledek dotazu:

Jméno Datum nákupu LastDayDate
pohovka 2019-02 -10 2019-03 -30
stůl 2019-04 -01 2019–05 -31
knihovna 2019–05 -20 2019–06 -30

U pohovky s datem nákupu ‚2019-02-10‘ tento dotaz vrátí ‚2019-03-30‘ – poslední den příštího Měsíc. Ke konci aktuálního měsíce jsme přidali jeden měsíc.

Pokud byste chtěli najít poslední den v měsíci před daný měsíc, použijte jako druhý argument zápornou hodnotu (např. „-1“):

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

Zde je výsledek dotazu:

Jméno Datum nákupu LastDayDate
pohovka 2019-02 -10 2019–01 -31
stůl 2019-04 -01 2019-03 -31
knihovna 2019–05 -20 2019-04 -30

  1. Funkce SYSDATE v Oracle

  2. Výpočet věku od narozenin pomocí oracle plsql trigger a vložení věku do tabulky

  3. DatabaseError:aktuální transakce je přerušena, příkazy jsou ignorovány až do konce bloku transakce?

  4. Jak uniknout jedné uvozovce na serveru SQL Server?