Problem:
Du vil gerne have datoen 30 dage før en given dato i T-SQL.
Eksempel:
Vores database har en tabel med navnet Computer
med data i kolonnerne Id
, Name
og PurchaseDate
.
Id | Navn | Købsdato |
---|---|---|
1 | Sony GX1000 | 2019-01-20 |
2 | Samsung LX2000 | 2019-04-15 |
3 | Dell K80 | 2019-08-30 |
Lad os få navnet på hver computer og datoen 30 dage før dens købsdato.
Løsning:
Vi vil bruge DATEADD()-funktionen til at trække et givet antal dage fra en dato.
SELECT Name, DATEADD(day, -30, PurchaseDate) AS BeforePurchaseDate; FROM Computer;
Her er resultatet af forespørgslen:
Navn | Før købsdato |
---|---|
Sony GX1000 | 2018-12-21 |
Samsung LX2000 | 2019-03-16 |
Dell K80 | 2019-07-31 |
Diskussion:
Hvis du gerne vil trække datoer eller klokkeslæt i SQL Server, skal du bruge DATEADD()
fungere. Det kræver tre argumenter. Det første argument er dato/tidsenheden – i vores eksempel angiver vi dagen enhed.
Dernæst er datoen eller tidsenhedens værdi . I vores eksempel er dette -30 , fordi vi tager 30 dage fra den aktuelle dato. Husk at minus angiver at trække fra værdien; uden dette tegn tilføjer du til den givne dato.
Det sidste argument er den dato, vi opererer på; dette kunne være en dato/tid/datotid-kolonne eller ethvert udtryk, der returnerer en dato eller et klokkeslæt. I vores eksempel bruger vi PurchaseDate
, en date
kolonne.
Funktionen returnerer en ændret dato. I vores eksempel er forespørgslen til computeren med navnet 'Dell K80'
returnerer en ny dato i BeforePurchaseDate
kolonne. Den oprindelige dato '2019-08-30'
ændres til datoen fra 30 dage tilbage:'2018-07-31'
.
Du kan bruge DATEADD()
funktion for alle dato- og tidsdatatyper.