Problem:
Du vill få datumet 30 dagar före ett givet datum i T-SQL.
Exempel:
Vår databas har en tabell som heter Computer
med data i kolumnerna Id
, Name
och PurchaseDate
.
Id | Namn | Köpdatum |
---|---|---|
1 | Sony GX1000 | 2019-01-20 |
2 | Samsung LX2000 | 2019-04-15 |
3 | Dell K80 | 2019-08-30 |
Låt oss få namnet på varje dator och datumet 30 dagar före dess inköpsdatum.
Lösning:
Vi kommer att använda DATEADD()-funktionen för att subtrahera ett givet antal dagar från ett datum.
SELECT Name, DATEADD(day, -30, PurchaseDate) AS BeforePurchaseDate; FROM Computer;
Här är resultatet av frågan:
Namn | FörePurchaseDate |
---|---|
Sony GX1000 | 2018-12-21 |
Samsung LX2000 | 2019-03-16 |
Dell K80 | 2019-07-31 |
Diskussion:
Om du vill subtrahera datum eller tider i SQL Server, använd DATEADD()
fungera. Det krävs tre argument. Det första argumentet är datum/tidsenheten – i vårt exempel anger vi dagen enhet.
Nästa är datumet eller tidsenhetens värde . I vårt exempel är detta -30 , eftersom vi tar 30 dagar från det aktuella datumet. Kom ihåg att minus anger subtrahera värdet; utan detta tecken lägger du till det givna datumet.
Det sista argumentet är datumet vi opererar på; detta kan vara en kolumn för datum/tid/datumtid eller något uttryck som returnerar ett datum eller en tid. I vårt exempel använder vi PurchaseDate
, ett date
kolumn.
Funktionen returnerar ett ändrat datum. I vårt exempel, frågan för datorn med namnet 'Dell K80'
returnerar ett nytt datum i BeforePurchaseDate
kolumn. Det ursprungliga datumet '2019-08-30'
ändras till datumet från 30 dagar tillbaka:'2018-07-31'
.
Du kan använda DATEADD()
funktion för alla datum- och tidsdatatyper.