Ga naar hoofdinhoud

DATEDIFF() SQL-FUNCTIE

DATEDIFF() is een van de meestgebruikte functies voor datumbewerking in SQL. Beheers ’m met deze tutorial.
· 3 min lezen

Verken met AI

DATEDIFF() is een van de meestgebruikte functies voor het manipuleren van datum en tijd in SQL. In deze tutorial leer je de toepassing, syntaxis en belangrijkste verschillen tussen populaire SQL-dialecten, zodat je deze krachtige functie onder de knie krijgt.

Wat is de DATEDIFF()-functie?

De functie DATEDIFF() berekent het verschil tussen twee datum- of timestampwaarden en geeft het resultaat terug in een opgegeven eenheid, zoals dagen, maanden of jaren.

DATEDIFF-syntaxis in verschillende SQL-dialecten

De syntaxis voor DATEDIFF() verschilt per SQL-dialect. Hieronder staan voorbeelden voor veelgebruikte databases:

 

Hier is het volledig bijgewerkte en gepolijste artikel met alle gevraagde verbeteringen en uitbreidingen:


DATEDIFF() SQL Function

DATEDIFF() is een van de meestgebruikte functies voor het manipuleren van datum en tijd in SQL. In deze tutorial leer je de toepassing, syntaxis en belangrijkste verschillen tussen populaire SQL-dialecten, zodat je deze krachtige functie onder de knie krijgt.


What is the DATEDIFF() Function?

De functie DATEDIFF() berekent het verschil tussen twee datum- of timestampwaarden en geeft het resultaat terug in een opgegeven eenheid, zoals dagen, maanden of jaren.


DATEDIFF-syntaxis in verschillende SQL-dialecten

De syntaxis voor DATEDIFF() verschilt per SQL-dialect. Hieronder staan voorbeelden voor veelgebruikte databases:

SQL Server

DATEDIFF(datepart, startdate, enddate)
  • datepart: De tijdseenheid (bijv. year, month, day).
  • startdate en enddate: De datums of timestamps om te vergelijken. Het resultaat wordt berekend als enddate - startdate.

MySQL

DATEDIFF(enddate, startdate)
  • Geeft alleen het verschil in dagen terug.

PostgreSQL

PostgreSQL heeft geen DATEDIFF()-functie, maar biedt vergelijkbare functionaliteit via:

  • De functie AGE():
SELECT AGE(enddate, startdate);
  • Rechtstreekse aftrekking van datumwaarden:
SELECT enddate - startdate;

Parameter

Wat is het?

datepart

Een vereiste parameter. Dit is de eenheid waarin DATEDIFF() het verschil tussen de startdate en enddate rapporteert. Zie de volgende sectie voor de verschillende typen waarden die het kan hebben. 

startdate

Een vereiste parameter die een datetimewaarde aanduidt die de startdatum aangeeft. 

enddate

Een vereiste parameter die een datetimewaarde aanduidt die de einddatum aangeeft. 

datepart-syntaxis 

De parameter datepart bepaalt de tijdseenheid waarin het verschil wordt berekend. SQL Server ondersteunt de volgende datepart-waarden:

DatepartAliassen
yearyy, yyyy
quarterqq, q
monthmm, m
daydd, d
hourhh
minutemi, n
secondss, s
millisecondms

Let op: MySQL ondersteunt alleen day als tijdseenheid voor DATEDIFF().

  • Aanhalingstekens: Gebruik altijd enkele aanhalingstekens (') voor datum- en tijdwaarden.
  • Positieve en negatieve resultaten: In SQL Server is het resultaat positief wanneer enddate > startdate en anders negatief.
  • Foutafhandeling: Als het resultaat groter is dan ±2.147.483.647, gebruik dan DATEDIFF_BIG() in SQL Server.

DATEDIFF()-voorbeelden

Bij het werken met DATEDIFF() kunnen de resultaten positief of negatief zijn. Als enddate later is dan startdate, retourneert DATEDIFF() een positieve waarde. Als enddate eerder is dan startdate, retourneert DATEDIFF() een negatieve waarde. 

Voorbeeld 1: Vind het verschil tussen twee datums

In SQL Server:

SELECT DATEDIFF(year, '2022-12-31', '2024-06-01') AS years_difference;

Uitleg: Dit berekent het verschil in jaren tussen de twee datums. Omdat 2023 en een deel van 2024 worden meegeteld, is het resultaat 1.

In MySQL: 

SELECT DATEDIFF('2024-06-01', '2022-12-31') AS days_difference;

Uitleg: MySQL ondersteunt alleen verschillen in dagen. Het resultaat is 518.

Voorbeeld 2: Vind het verschil tussen twee timestamps

SELECT 
    DATEDIFF(hour, '2023-12-31 00:00:00', '2023-12-31 23:59:59') AS hours_difference,
    DATEDIFF(minute, '2023-12-31 00:00:00', '2023-12-31 23:59:59') AS minutes_difference,
    DATEDIFF(second, '2023-12-31 00:00:00', '2023-12-31 23:59:59') AS seconds_difference;

Uitleg:

  • hours_difference retourneert 23 omdat de twee timestamps 23 uur uit elkaar liggen.
  • minutes_difference retourneert 1439, wat 23 hours * 60 minutes is.
  • seconds_difference retourneert 86,399, wat 1439 minutes * 60 seconds is.

Voorbeeld 3: Vind het verschil tussen twee kolommen met datums

Stel, je hebt een tabel orders met order_date en shipped_date. Gebruik DATEDIFF() om de verzendtijd per bestelling te berekenen.

SELECT 
    order_id,
    DATEDIFF(day, order_date, shipped_date) AS shipping_days 
FROM sales.orders;

Uitleg: De query berekent het aantal dagen dat nodig was om elke bestelling te verzenden.

Voorbeeld 4. Bepaal het interval tussen de datum van vandaag en een kolom

Met de tabel sales.orders zoals in Voorbeeld 3 kunnen we DATEDIFF() gebruiken om het interval te vinden tussen de datum van vandaag en de datum waarop een bestelling is geplaatst.

SELECT 
    order_id,
    order_date,
    GETDATE() AS today_date,
    DATEDIFF(day, order_date, GETDATE()) AS days_from_order;

Uitleg:

  • GETDATE() haalt de huidige datum en tijd op in SQL Server.
  • Het verschil in dagen tussen de order_date en vandaag wordt berekend.

Extra opmerkingen

De functie DATEDIFF() geeft een fout terug als het resultaat buiten bereik valt (d.w.z. groter dan +2.147.483.647 of kleiner dan -2.147.483.647). In dat geval is de functie DATEDIFF_BIG() geschikt. 

Veelvoorkomende fouten en troubleshooting

Bij het werken met DATEDIFF() kun je gemakkelijk tegen problemen aanlopen met syntaxis, argumentvolgorde of database-specifiek gedrag. Hieronder staan veelvoorkomende fouten en hoe je ze oplost:

1. Onjuiste aanhalingstekens

Probleem: Aanhalingstekens rond datepart of inconsistente stijlen voor datumliteralen.

Oplossing: Laat datepart altijd onaanhalingsteken en gebruik enkele aanhalingstekens voor datums.

-- Incorrect
SELECT DATEDIFF('year', '2023-01-01', '2024-01-01');

-- Correct
SELECT DATEDIFF(year, '2023-01-01', '2024-01-01');
 

2. Niet-ondersteunde datepart in MySQL

Probleem: DATEDIFF() in MySQL ondersteunt alleen verschillen in dagen.

Oplossing: Gebruik TIMESTAMPDIFF() voor fijnmazige eenheden zoals jaren of maanden.

-- Correct (MySQL)
SELECT TIMESTAMPDIFF(YEAR, '2023-01-01', '2024-01-01') AS years_difference; -- Returns 1

3. Volgorde van argumenten is belangrijk

Probleem: Het omwisselen van startdate en enddate kan tot onverwachte negatieve resultaten leiden.

Oplossing: Zorg dat startdate eerst komt. Gebruik ABS() als alleen de grootte van het verschil telt.

-- Incorrect
SELECT DATEDIFF(day, '2023-01-05', '2023-01-01'); -- Returns -4

-- Correct
SELECT DATEDIFF(day, '2023-01-01', '2023-01-05'); -- Returns 4

4. Lokaalspecifieke datumopmaak

Probleem: Dubbelzinnige datumformaten (bijv. MM/DD/YYYY vs. DD/MM/YYYY) kunnen fouten veroorzaken.

Oplossing: Gebruik de ISO 8601-standaard (YYYY-MM-DD) om dubbelzinnigheid te voorkomen.

-- Correct
SELECT DATEDIFF(day, '2023-01-01', '2023-12-31'); -- Returns 364

5. Waarden buiten bereik (SQL Server)

Probleem: Grote verschillen groter dan ±2.147.483.647 veroorzaken een overflow-fout.Oplossing: Gebruik DATEDIFF_BIG() voor grote bereiken.

-- Correct
SELECT DATEDIFF_BIG(day, '0001-01-01', '9999-12-31'); -- Returns 2,920,862,800

Technische vereisten

Werkt in SQL Server (vanaf 2008), Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse

Zie ook

Meer leren over SQL

Travis Tang

Auteur

Travis Tang

Als data scientist bij Tiktok en masterstudent aan GeorgiaTech heb ik een aangeboren passie voor data science. Ik heb een uniek carrièrepad uitgestippeld waarin technologie, risico en voortdurende zelfverbetering samenkomen. Tijdens mijn periode als Data Scientist bij Merchant Platform beperkte ik risico’s en bestreed ik fraude met complexe datamodellen, waarmee ik wekelijks duizenden dollars bespaarde. Ik heb mijn vaardigheden aangescherpt door talloze uren aan zelfstudie te wijden, certificaten te behalen bij gerenommeerde instellingen en me te bekwamen in onderwerpen als Deep Learning, TensorFlow en Social Network Analysis. Op DataCamp en andere onderwijsplatforms gebruik ik deze schat aan kennis om anderen te inspireren en te onderwijzen, nieuwe paden te banen binnen data science en te laten zien dat met vastberadenheid en de juiste data elk risico kan worden omgezet in een kans.

Onderwerpen

Gerelateerd