sql >> Database >  >> RDS >> Sqlserver

DATEADD() Voorbeelden in SQL Server

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.


  1. Gebruikt u de juiste tools voor het bewaken van databaseprestaties?

  2. Controleer of een object een opgeslagen procedure is met behulp van OBJECTPROPERTY() in SQL Server

  3. Tel rijen per uur in SQL Server met volledige datum-tijdwaarde als resultaat

  4. Hoe de MySQL-versie te controleren?