In SQL Server kunt u de DATEADD()
. gebruiken functie om een gespecificeerde tijdsperiode aan een bepaalde datum toe te voegen. Je kunt het ook gebruiken om een bepaalde tijdsperiode af te trekken.
Je kunt ook DATEADD()
. combineren met andere functies om de datum naar wens te formatteren. U kunt bijvoorbeeld '2020-10-03' nemen, 10 jaar optellen en dan de (verhoogde) jaarcomponent teruggeven.
Dit artikel bevat voorbeelden om te demonstreren.
Syntaxis
De syntaxis van DATEADD()
gaat als volgt:
DATEADD (datepart , number , date )
Waar datepart
is het deel van de datum dat u wilt verhogen (of verlagen), number
is het te verhogen bedrag datepart
door, en date
is de datum waarop de toevoeging zal plaatsvinden.
Voorbeeld 1
Hier is een eenvoudig voorbeeld van het toevoegen van tien jaar aan een datum:
SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';
Resultaat:
+-------------------------+ | Future Date | |-------------------------| | 2030-10-03 00:00:00.000 | +-------------------------+
In dit geval omvat de retourwaarde zowel de tijdcomponent als de datum. Dit komt omdat het resultaat wordt geretourneerd als een datetime waarde. De reden dat het als dit gegevenstype wordt geretourneerd, is omdat we een letterlijke tekenreeks hebben opgegeven als de date
argument. Als u een letterlijke tekenreeks opgeeft als datum, DATEADD()
retourneert een datetime waarde.
In gevallen waarin u geen letterlijke tekenreeks opgeeft, is de geretourneerde waarde hetzelfde als het gegevenstype van de date
argument. Als u bijvoorbeeld een datetime2 argument, is de geretourneerde waarde datetime2 .
Voorbeeld 2 – Het resultaat opmaken
We kunnen het bovenstaande resultaat nemen en het formatteren met de FORMAT()
functie:
SELECT FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy-MM-dd') AS 'yyyy-MM-dd', FORMAT(DATEADD(year, 10, '2020-10-03'), 'dd/MM/yyyy') AS 'dd/MM/yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yyyy') AS 'yyyy', FORMAT(DATEADD(year, 10, '2020-10-03'), 'yy') AS 'yy';
Resultaat:
+--------------+--------------+--------+------+ | yyyy-MM-dd | dd/MM/yyyy | yyyy | yy | |--------------+--------------+--------+------| | 2030-10-03 | 03/10/2030 | 2030 | 30 | +--------------+--------------+--------+------+
Maar het is belangrijk op te merken dat de FORMAT()
functie retourneert het resultaat als een tekenreeks.
Een andere optie is om CONVERT()
. te gebruiken om het resultaat om te zetten naar een datum gegevenstype:
SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;
Resultaat:
+-------------+ | Converted | |-------------| | 2030-10-03 | +-------------+
Of u kunt een functie gebruiken zoals YEAR()
, wat het resultaat als een geheel getal retourneert:
SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';
Resultaat:
+---------------+ | Future Year | |---------------| | 2030 | +---------------+
Voorbeeld 3 – Datums aftrekken
U kunt negatieve getallen gebruiken om van de datum af te trekken:
SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';
Resultaat:
+-------------------------+ | Earlier Date | |-------------------------| | 2010-10-03 00:00:00.000 | +-------------------------+
En natuurlijk kun je dit formatteren met een van de eerder genoemde methoden.
Voorbeeld 4 – Systeemdatums
Hier zijn enkele voorbeelden van het gebruik van verschillende functies om de huidige datum/tijd te retourneren vanaf de computer waarop het exemplaar van SQL Server wordt uitgevoerd.
SYSDATETIME()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Resultaat:
+-----------------------------+-----------------------------+ | Current Date | Future Date | |-----------------------------+-----------------------------| | 2018-06-04 05:57:51.7297042 | 2028-06-04 05:57:51.7297042 | +-----------------------------+-----------------------------+
SYSDATETIMEOFFSET()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Resultaat:
+--------------------------+--------------------------+ | Current Date | Future Date | |--------------------------+--------------------------| | 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 | +--------------------------+--------------------------+
Zoals vermeld, worden deze resultaten geretourneerd met het gegevenstype van de date
argument (omdat het geen letterlijke tekenreeksen zijn).
De uitvoer formatteren
SELECT YEAR(SYSDATETIME()) AS 'Current Year', YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';
Resultaat:
+----------------+---------------+ | Current Year | Future Year | |----------------+---------------| | 2018 | 2028 | +----------------+---------------+
En zoals ook vermeld, als u de datum opmaakt, wordt deze geretourneerd in het gegevenstype voor de toepasselijke functie. Dus in dit voorbeeld wordt het resultaat geretourneerd als een int . Als we het hadden geformatteerd met de FORMAT()
functie, zou het worden geretourneerd als een tekenreeks.