DATEDIFF functie SQL

Door Rachelle Blok
In SQL
29 juni 2014
0 Reacties
2889 Views

In SQL Server Management Studio kun je met behulp van de DATEDIFF functie het verschil berekenen tussen twee datumvelden. De DATEDIFF functie heeft de volgende syntax: DATEDIFF(datepart, startdate, enddate). De drie parameters zijn dus:

  • Datepart: dit is het deel van de datumvelden waarvoor je het verschil wilt uitrekenen. 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
    hour hh
    minute mi n
    second ss s
    millisecond ms
    microsecond mcs
    nanosecond ns
    Zowel de datepart namen als de afkortingen kunnen worden gebruikt als parameter.
  • Startdate: dit is de begindatum voor het berekenen van het verschil tussen twee datumvelden. Dit datumveld kan de types timedatesmalldatetimedatetimedatetime2 en datetimeoffset hebben.
  • Enddate: Dit is de einddatum. Dit datumveld kan de types timedatesmalldatetimedatetimedatetime2 en datetimeoffset hebben.

Let op! Als de twee datumvelden van verschillende types zijn, bijvoorbeeld van type time en date, dan wordt het missende gedeelte op de default waarde gezet. De default datum is 1900-01-01 en de default tijd is 00:00:00.
De functie geeft een integer waarde terug.

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

Toepassing

Een voorbeeld van een toepassing is als je bijvoorbeeld wilt kijken of een klant binnen de betalingstermijn heeft betaald. We rekenen dan het verschil uit tussen de orderdatum en de betaaldatum.

In onderstaande tabel hebben we de OrderDatum gebruikt als de parameter startdate. De BetaalDatum is de enddate. De kolom DatumGedeelte geeft de datepart weer en de kolom VerschilAantal geeft het getal weer die de functie teruggeeft. Dat is het verschil tussen de begin-en einddatum.
DateDiff SQL
We zien dat per datumgedeelte het verschil wordt berekend. Voor het jaar wordt alleen naar het jaartal gekeken en voor de secondes alleen naar de secondes. Wanneer twee datums een ander jaartal hebben maar de dagen vallen wel in dezelfde week, dan is het verschil in het aantal weken 0.

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 DateDiffTabel
(
ID INT NOT NULL,
DatumGedeelte VARCHAR(30),
OrderDatum datetime2,
BetaalDatum datetime2,
VerschilAantal int
)
[/sql]

Tabel vullen:
[sql] DECLARE @orderdatum datetime2 = ‘2014-12-31 23:59:59.9999999’
DECLARE @betaaldatum datetime2 = ‘2015-01-01 00:00:00.0000000’

INSERT INTO DateDiffTabel
VALUES
(1, ‘Year’, @orderdatum, @betaaldatum, DATEDIFF(YEAR, @orderdatum, @betaaldatum)),
(2, ‘Quarter’, @orderdatum, @betaaldatum, DATEDIFF(QUARTER, @orderdatum, @betaaldatum)),
(3, ‘Month’, @orderdatum, @betaaldatum, DATEDIFF(mm, @orderdatum, @betaaldatum)),
(4, ‘DayOfYear’, @orderdatum, @betaaldatum, DATEDIFF(DAYOFYEAR, @orderdatum, @betaaldatum)),
(5, ‘Day’, @orderdatum, @betaaldatum, DATEDIFF(DAY, @orderdatum, @betaaldatum)),
(6, ‘Week’, @orderdatum, @betaaldatum, DATEDIFF(WEEK, @orderdatum, @betaaldatum)),
(7, ‘Hour’, @orderdatum, @betaaldatum, DATEDIFF(HOUR, @orderdatum, @betaaldatum)),
(8, ‘Minute’, @orderdatum, @betaaldatum, DATEDIFF(MINUTE, @orderdatum, @betaaldatum)),
(9, ‘Second’, @orderdatum, @betaaldatum, DATEDIFF(SECOND, @orderdatum, @betaaldatum)),
(10, ‘Millisecond’, @orderdatum, @betaaldatum, DATEDIFF(MILLISECOND, @orderdatum, @betaaldatum)),
(11, ‘Microsecond’, @orderdatum, @betaaldatum, DATEDIFF(MICROSECOND, @orderdatum, @betaaldatum))
[/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 *