DATEADD functie SQL

Door Rachelle Blok
In SQL
22 juni 2014
0 Reacties
4043 Views

In SQL Server Management Studio kun je met behulp van de DATEADD functie een datumveld manipuleren. Met behulp van de DATEADD functie kun je een bepaald getal aan een deel van de datum optellen. Je kunt bijvoorbeeld een jaar bij de huidige datum optellen. De DATEADD functie heeft de volgende syntax: DATEADD(datepart, number, date). De drie parameters zijn dus:

  • Datepart: dit is het deel van de datum waarbij je een bepaald getal wilt optellen. Er zijn verschillende toegestane argumenten die je kunt meegeven aan deze parameter. Dit zijn de volgende:
    datepart afkortingen
    year yy yyyy
    quarter qq q
    month mm m
    dayofyear dy y
    day dd d
    week wk ww
    weekday dw w
    hour hh
    minute mi n
    second ss s
    millisecond ms
    microsecond mcs
    nanosecond ns
    Let op: Zowel de datepart namen als de afkortingen kunnen worden gebruikt als parameter.
  • Number: dit is een integer die je bij de datepart van de datum wilt optellen. Een voorbeeld is 3 met als datepart ‘day’. Er worden dan 3 dagen bij de datum opgeteld.
  • Date: de datum die je wilt manipuleren. Het datumveld kan verschillende types hebben zoals time, date, smalldatetime, datetime, datetime2 of datetimeoffset.

Stel dat de huidige datum 03-01-2014 is. We willen 5 maanden optellen bij deze datum. Dit gaat dan als volgt:
DATEADD(month, 5, ’03-01-2014′). Het resultaat is 03-06-2014.

De functie DATEADD kan in de SELECT, WHERE, HAVING, GROUP BY en ORDER BY clauses gebruikt worden.

Toepassing

Een voorbeeld van een toepassing om de DATEADD functie te gebruiken is als je de verzenddatum van een product wilt registreren. Stel dat de verzenddatum standaard drie dagen na de orderdatum is, dan kun je drie dagen bij de orderdatum optellen zodat automatisch de verzenddatum wordt berekend.

Hieronder staat een voorbeeld waarbij alle datumgedeeltes aan bod komen. De OrderDatum hebben we gebruikt als de parameter date. De Verzenddatum is de datum die gemanipuleerd wordt. De kolom DatumGedeelte geeft de datepart weer, de kolom Aantal geeft het getal weer die voor de parameter number is gebruikt.
DateAdd SQL
Een aantal conclusies die we hieruit kunnen trekken zijn:

  • Wanneer we kijken naar de rij 3 zien we dat er één maand bij de huidige datum wordt opgeteld. Omdat de maand februari in 2014 maar 28 dagen heeft, wordt de verzenddatum de laatste dag van de maand februari, dus 28 februari.
  • We zien dat DayOfYear, Day en WeekDay (rijen 4, 5 en 7) dezelfde Verzenddatum opleveren.
  • Het is ook mogelijk om een negatief getal in te vullen voor de parameter Number. Voor het datumgedeelte Week (rij 6) is er één week afgetrokken van de orderdatum.
  • De laatste twee rijen voor de Nanosecond (rij 13 en 14) voegen respectievelijk 50 en 49 nanoseconden toe aan de OrderDatum. Opmerkelijk is dat voor getallen tussen 1 en 49 de nanoseconden naar beneden worden afgerond naar 0 en voor getallen tussen de 50 en 99 worden de nanoseconden omhoog afgerond naar 100.

Zelf proberen

Wil je zelf experimenteren met de dataset? Gebruik dan onderstaande SQL queries. Je kunt de queries kopiëren en plakken.

Tabel maken:
[sql] CREATE TABLE DateAddTabel
(
ID INT NOT NULL,
DatumGedeelte VARCHAR(30),
Aantal VARCHAR(30),
OrderDatum DATETIME2,
Verzenddatum DATETIME2
)
[/sql] Tabel vullen:
[sql] DECLARE @orderdatum datetime2 = ‘2014-01-31 00:00:00.0000000’

INSERT INTO DateAddTabel
VALUES
(1, ‘Year’, ‘3’, @orderdatum, DATEADD(YYYY, 3, @orderdatum)),
(2, ‘Quarter’, ‘2’, @orderdatum, DATEADD(QUARTER, 2, @orderdatum)),
(3, ‘Month’, ‘1’, @orderdatum, DATEADD(MONTH, 1, @orderdatum)),
(4, ‘DayOfYear’, ’60’, @orderdatum, DATEADD(DAYOFYEAR, 60, @orderdatum)),
(5, ‘Day’, ’60’, @orderdatum, DATEADD(DAY, 60, @orderdatum)),
(6, ‘Week’, ‘-1’, @orderdatum, DATEADD(WEEK, -1, @orderdatum)),
(7, ‘WeekDay’, ’60’, @orderdatum, DATEADD(WEEKDAY, 60, @orderdatum)),
(8, ‘Hour’, ‘2’, @orderdatum, DATEADD(HOUR, 2, @orderdatum)),
(9, ‘Minute’, ’45’, @orderdatum, DATEADD(MINUTE, 45, @orderdatum)),
(10, ‘Second’, ‘1’, @orderdatum, DATEADD(SECOND, 1, @orderdatum)),
(11, ‘Millisecond’, ‘1’, @orderdatum, DATEADD(MILLISECOND, 1, @orderdatum)),
(12, ‘Microsecond’, ‘1’, @orderdatum, DATEADD(MICROSECOND, 1, @orderdatum)),
(13, ‘Nanosecond’, ’50’, @orderdatum, DATEADD(NANOSECOND, 50, @orderdatum)),
(14, ‘Nanosecond’, ’49’, @orderdatum, DATEADD(NANOSECOND, 49, @orderdatum))
[/sql]

Over "" Heeft 37 Posts

Rachelle Blok studeert Data Science en schrijft blogartikelen voor ReportingBLOG, over verschillende tools zoals Excel, SQL Server en Crystal Reports. Rachelle heeft daarnaast een eigen bedrijf in webdesign.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *