sql >> Database teknologi >  >> RDS >> Sqlserver

DATEADD() Eksempler i SQL Server

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.


  1. Kørsel af SQL Server 2014 på en Azure Virtual Machine

  2. Sådan kalder du MySQL Stored Procedure i Python

  3. Test af Android SQLite-databaseenhed

  4. Hvordan importerer jeg en SQL-fil ved hjælp af kommandolinjen i MySQL?