Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

DATEADD()-Beispiele in SQL Server

In SQL Server können Sie DATEADD() verwenden Funktion zum Hinzufügen eines bestimmten Zeitraums zu einem bestimmten Datum. Sie können damit auch einen bestimmten Zeitraum subtrahieren.

Sie können auch DATEADD() kombinieren mit anderen Funktionen, um das Datum nach Bedarf zu formatieren. Sie könnten beispielsweise „2020-10-03“ nehmen, 10 Jahre hinzufügen und dann die (erhöhte) Jahreskomponente zurückgeben.

Dieser Artikel enthält Beispiele zur Veranschaulichung.

Syntax

Die Syntax von DATEADD() geht so:

DATEADD (datepart , number , date )

Wobei datepart ist der Teil des Datums, der erhöht (oder verringert) werden soll, number ist der Betrag um datepart zu erhöhen bis und date ist das Datum, an dem die Hinzufügung stattfinden wird.

Beispiel 1

Hier ist ein einfaches Beispiel für das Addieren von zehn Jahren zu einem Datum:

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

Ergebnis:

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

In diesem Fall enthält der Rückgabewert neben dem Datum auch die Zeitkomponente. Das liegt daran, dass das Ergebnis als datetime zurückgegeben wird Wert. Der Grund dafür, dass es als dieser Datentyp zurückgegeben wird, ist, dass wir ein Zeichenfolgenliteral als date angegeben haben Streit. Wenn Sie ein Zeichenfolgenliteral als Datum angeben, DATEADD() gibt eine datetime zurück Wert.

In Fällen, in denen Sie kein Zeichenfolgenliteral angeben, ist der Rückgabewert derselbe wie der Datentyp von date Streit. Wenn Sie beispielsweise ein datetime2 angeben -Argument ist der Rückgabewert datetime2 .

Beispiel 2 – Formatieren des Ergebnisses

Wir können das obige Ergebnis nehmen und es mit FORMAT() formatieren 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';

Ergebnis:

+--------------+--------------+--------+------+
| yyyy-MM-dd   | dd/MM/yyyy   | yyyy   | yy   |
|--------------+--------------+--------+------|
| 2030-10-03   | 03/10/2030   | 2030   | 30   |
+--------------+--------------+--------+------+

Aber es ist wichtig zu beachten, dass die FORMAT() Funktion gibt ihr Ergebnis als String zurück.

Eine weitere Option ist die Verwendung von CONVERT() um das Ergebnis in ein Datum umzuwandeln Datentyp:

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

Ergebnis:

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

Oder Sie können eine Funktion wie YEAR() verwenden , die das Ergebnis als ganze Zahl zurückgibt:

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

Ergebnis:

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

Beispiel 3 – Subtrahieren von Datumsangaben

Sie können negative Zahlen verwenden, um vom Datum abzuziehen:

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

Ergebnis:

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

Und natürlich können Sie dies mit einer der zuvor erwähnten Methoden formatieren.

Beispiel 4 – Systemdaten

Hier sind einige Beispiele für die Verwendung verschiedener Funktionen, um das aktuelle Datum/die aktuelle Uhrzeit von dem Computer zurückzugeben, auf dem die Instanz von SQL Server ausgeführt wird.

SYSDATETIME()

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

Ergebnis:

+-----------------------------+-----------------------------+
| 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';

Ergebnis:

+--------------------------+--------------------------+
| Current Date             | Future Date              |
|--------------------------+--------------------------|
| 4/6/18 6:02:07 am +00:00 | 4/6/28 6:02:07 am +00:00 |
+--------------------------+--------------------------+

Wie bereits erwähnt, werden diese Ergebnisse mit dem Datentyp date zurückgegeben Argument (weil sie keine String-Literale sind).

Ausgabe formatieren

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

Ergebnis:

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

Und wie bereits erwähnt, wenn Sie das Datum formatieren, wird es im Datentyp für die entsprechende Funktion zurückgegeben. In diesem Beispiel wird das Ergebnis also als int zurückgegeben . Wenn wir es mit FORMAT() formatiert hätten Funktion, würde sie als String zurückgegeben werden.