sql >> Databasteknik >  >> RDS >> Sqlserver

DATEADD() Exempel i SQL Server

I SQL Server kan du använda DATEADD() funktion för att lägga till en angiven tidsperiod till ett givet datum. Du kan också använda den för att subtrahera en viss tidsperiod.

Du kan också kombinera DATEADD() med andra funktioner för att formatera datumet efter behov. Du kan till exempel ta "2020-10-03", lägga till 10 år och sedan returnera den (ökade) årskomponenten.

Den här artikeln innehåller exempel att visa.

Syntax

Syntaxen för DATEADD() går så här:

DATEADD (datepart , number , date )

Där datepart är den del av datumet du vill ökas (eller minskas), number är det belopp som ska ökas datepart av och date är det datum till vilket tillägget kommer att ske.

Exempel 1

Här är ett grundläggande exempel på att lägga till tio år till ett datum:

SELECT DATEADD(year, 10, '2020-10-03') AS 'Future Date';

Resultat:

+-------------------------+
| Future Date             |
|-------------------------|
| 2030-10-03 00:00:00.000 |
+-------------------------+

I det här fallet inkluderar returvärdet såväl tidskomponenten som datumet. Detta beror på att resultatet returneras som en datumtid värde. Anledningen till att den returneras som denna datatyp är att vi har angett en bokstavlig sträng som date argument. När du anger en bokstavlig sträng som datum, DATEADD() returnerar en datumtid värde.

I de fall du inte anger en bokstavlig sträng är returvärdet detsamma som datatypen för date argument. Till exempel om du anger en datetime2 argumentet kommer returvärdet att vara datetime2 .

Exempel 2 – Formatera resultatet

Vi kan ta resultatet ovan och formatera 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 är viktigt att notera att FORMAT() funktion returnerar sitt resultat som en sträng.

Ett annat alternativ är att använda CONVERT() för att konvertera resultatet till ett datum datatyp:

SELECT CONVERT(date, DATEADD(year, 10, '2020-10-03')) AS Converted;

Resultat:

+-------------+
| Converted   |
|-------------|
| 2030-10-03  |
+-------------+

Eller så kan du använda en funktion som YEAR() , som returnerar resultatet som ett heltal:

SELECT YEAR(DATEADD(year, 10, '2020-10-03')) AS 'Future Year';

Resultat:

+---------------+
| Future Year   |
|---------------|
| 2030          |
+---------------+

Exempel 3 – Subtrahera datum

Du kan använda negativa tal för att subtrahera från datumet:

SELECT DATEADD(year, -10, '2020-10-03') AS 'Earlier Date';

Resultat:

+-------------------------+
| Earlier Date            |
|-------------------------|
| 2010-10-03 00:00:00.000 |
+-------------------------+

Och naturligtvis kan du formatera detta med någon av metoderna som nämnts tidigare.

Exempel 4 – Systemdatum

Här är några exempel på hur man använder olika funktioner för att returnera aktuellt datum/tid från datorn där instansen av SQL Server körs.

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ämnts returneras dessa resultat med datatypen date argument (eftersom de inte är bokstavliga strängar).

Formatera utdata

SELECT 
    YEAR(SYSDATETIME()) AS 'Current Year',
    YEAR(DATEADD(year, 10, SYSDATETIME())) AS 'Future Year';

Resultat:

+----------------+---------------+
| Current Year   | Future Year   |
|----------------+---------------|
| 2018           | 2028          |
+----------------+---------------+

Och som också nämnt, om du formaterar datumet kommer det att returneras i datatypen för den tillämpliga funktionen. Så i det här exemplet returneras resultatet som en int . Om vi ​​hade formaterat den med FORMAT() funktion, skulle den returneras som en sträng.


  1. Fråga efter arrayelement i JSON-typ

  2. Returnera slutet av månaden i SQLite

  3. Två SQL LEFT JOINS ger felaktigt resultat

  4. Åtgärda fel:"SELECTs till vänster och höger om UNION har inte samma antal resultatkolumner" i SQLite