DATEDIFF functie SQL
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:
Zowel de datepart namen als de afkortingen kunnen worden gebruikt als parameter.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 - Startdate: dit is de begindatum voor het berekenen van het verschil tussen twee datumvelden. Dit datumveld kan de types time, date, smalldatetime, datetime, datetime2 en datetimeoffset hebben.
- Enddate: Dit is de einddatum. Dit datumveld kan de types time, date, smalldatetime, datetime, datetime2 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.
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]
Geef een reactie