I SQL Server kan du bruge DATEADD()
funktion til at tilføje en bestemt tidsperiode til en given dato. Du kan også bruge den til at trække en bestemt tidsperiode fra.
Du kan også kombinere DATEADD()
med andre funktioner til at formatere datoen efter behov. For eksempel kan du tage "2020-10-03", tilføje 10 år og derefter returnere den (forøgede) årskomponent.
Denne artikel indeholder eksempler til demonstration.
Syntaks
Syntaksen for DATEADD()
går sådan her:
DATEADD (datepart , number , date )
Hvor datepart
er den del af datoen, du ønsker skal øges (eller formindskes), number
er det beløb, der skal øges datepart
af og date
er den dato, hvor tilføjelsen vil finde sted.
Eksempel 1
Her er et grundlæggende eksempel på at tilføje ti år til en dato:
SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';
Resultat:
+-------------------------+ | Future Date | |-------------------------| | 2030-10-03 00:00:00.000 | +-------------------------+
I dette tilfælde inkluderer returværdien tidskomponenten såvel som datoen. Dette skyldes, at resultatet returneres som en datotid værdi. Grunden til, at det returneres som denne datatype, er, fordi vi har leveret en streng bogstavelig som date
argument. Når du angiver en streng literal som dato, DATEADD()
returnerer en datotid værdi.
I tilfælde, hvor du ikke angiver en streng literal, er returværdien den samme som datatypen for date
argument. For eksempel, hvis du angiver en datetime2 argument, vil returværdien være datetime2 .
Eksempel 2 – Formatering af resultatet
Vi kan tage ovenstående resultat og formatere det med FORMAT()
funktion:
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';
Resultat:
+--------------+--------------+--------+------+ | yyyy-MM-dd | dd/MM/yyyy | yyyy | yy | |--------------+--------------+--------+------| | 2030-10-03 | 03/10/2030 | 2030 | 30 | +--------------+--------------+--------+------+
Men det er vigtigt at bemærke, at FORMAT()
funktion returnerer sit resultat som en streng.
En anden mulighed er at bruge CONVERT()
for at konvertere resultatet til en dato datatype:
SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;
Resultat:
+-------------+ | Converted | |-------------| | 2030-10-03 | +-------------+
Eller du kan bruge en funktion som YEAR()
, som returnerer resultatet som et heltal:
SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';
Resultat:
+---------------+ | Future Year | |---------------| | 2030 | +---------------+
Eksempel 3 – Fratræk af datoer
Du kan bruge negative tal til at trække fra datoen:
SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';
Resultat:
+-------------------------+ | Earlier Date | |-------------------------| | 2010-10-03 00:00:00.000 | +-------------------------+
Og selvfølgelig kan du formatere dette ved at bruge en af de tidligere nævnte metoder.
Eksempel 4 – Systemdatoer
Her er nogle eksempler på brug af forskellige funktioner til at returnere den aktuelle dato/tid fra den computer, som forekomsten af SQL Server kører på.
SYSDATETIME()
SELECT SYSDATETIME() AS 'Current Date', DATEADD(year, 10, SYSDATETIME()) AS 'Future Date';
Resultat:
+-----------------------------+-----------------------------+ | 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';
Resultat:
+--------------------------+--------------------------+ | Current Date | Future Date | |--------------------------+--------------------------| | 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 | +--------------------------+--------------------------+
Som nævnt returneres disse resultater ved hjælp af datatypen date
argument (fordi de ikke er strenge bogstaver).
Formattering af output
SELECT YEAR(SYSDATETIME()) AS 'Current Year', YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';
Resultat:
+----------------+---------------+ | Current Year | Future Year | |----------------+---------------| | 2018 | 2028 | +----------------+---------------+
Og som også nævnt, hvis du formaterer datoen, vil den blive returneret i datatypen for den relevante funktion. Så i dette eksempel returneres resultatet som en int . Hvis vi havde formateret det med FORMAT()
funktion, ville den blive returneret som en streng.