Problém:
Chcete získat datum 30 dní před daným datem v T-SQL.
Příklad:
Naše databáze obsahuje tabulku s názvem Computer
s údaji ve sloupcích Id
, Name
a PurchaseDate
.
Id | Jméno | Datum nákupu |
---|---|---|
1 | Sony GX1000 | 20. 1. 2019 |
2 | Samsung LX2000 | 2019-04-15 |
3 | Dell K80 | 2019-08-30 |
Pojďme získat název každého počítače a datum 30 dní před datum jeho nákupu.
Řešení:
K odečtení daného počtu dní od data použijeme funkci DATEADD().
SELECT Name, DATEADD(day, -30, PurchaseDate) AS BeforePurchaseDate; FROM Computer;
Zde je výsledek dotazu:
Jméno | BeforePurchaseDate |
---|---|
Sony GX1000 | 21. 12. 2018 |
Samsung LX2000 | 2019-03-16 |
Dell K80 | 2019-07-31 |
Diskuse:
Pokud byste chtěli odečíst data nebo časy na serveru SQL Server, použijte DATEADD()
funkce. Chce to tři argumenty. Prvním argumentem je jednotka data/času – v našem příkladu zadáváme den jednotka.
Další je hodnota jednotky data nebo času . V našem příkladu je to -30 , protože od aktuálního data uplyne 30 dní. Pamatujte, že mínus značí odečítání hodnota; bez tohoto znaku přidáváte k danému datu.
Posledním argumentem je datum, kdy pracujeme; může to být sloupec datum/čas/datum a čas nebo jakýkoli výraz, který vrací datum nebo čas. V našem příkladu používáme PurchaseDate
, date
sloupec.
Funkce vrátí změněné datum. V našem příkladu jde o dotaz na počítač s názvem 'Dell K80'
vrátí nové datum v BeforePurchaseDate
sloupec. Původní datum '2019-08-30'
se mění na datum před 30 dny:'2018-07-31'
.
Můžete použít DATEADD()
funkce pro všechny typy dat data a času.