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.