Cursus
Begrijpen hoe je zoekt naar datums die later zijn dan een specifieke datum is cruciaal voor effectief databasemanagement en -analyse. Deze tutorial biedt een uitgebreide gids voor het uitvoeren van datumvergelijkingen in SQL over verschillende SQL-databasesystemen, waaronder SQL Server, PostgreSQL en Oracle. Of je nu werkt met historische data-analyse, rapportages of het filteren van records, het beheersen van deze techniek verbetert je SQL-queryvaardigheden.
Aan het einde van deze gids kun je:
- Begrijpen wat de nuances zijn van datumformaten en -functies in verschillende SQL-databases, waaronder SQL Server, PostgreSQL en Oracle.
- Toepassen van praktische voorbeelden op realistische scenario’s.
Ben je een data-analist of data scientist die klaar is om meer te leren? Dan raad ik de skill track SQL Fundamentals van DataCamp aan om je vertrouwd te maken met het opvragen van data uit databases. En voor wie zijn database-expertise wil uitbreiden: bekijk de cursus Database Design, die inzicht geeft in het bouwen van efficiënte databases.
Introductie tot datumvergelijkingen in SQL
Datumvergelijking is belangrijk in SQL omdat het dataspecialisten in staat stelt om tijdens analyses data te filteren en te sorteren. De methode is vooral nuttig in financiële rapportages of voorraadbeheer, waar trendanalyse nodig is.
De ‘groter dan’-operator (>) van SQL wordt met datums gebruikt om twee datumwaarden te vergelijken. Wanneer je de ‘groter dan’-operator in een SQL-query met datums opneemt, retourneert de query records met datums die later zijn dan de opgegeven datum. De onderstaande query retourneert bijvoorbeeld rijen in de tabel Orders waarbij de OrderDate later is dan 2023-01-01.
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Laten we beginnen met een korte herhaling van de basis-SQL-operatoren die je kunt gebruiken om data te filteren. Deze operatoren staan ook in onze SQL Basics Cheat Sheet, die je kunt doornemen voordat je de onderstaande voorbeelden probeert.
Gelijk aan (=)
De operator = wordt in SQL gebruikt om te vergelijken of twee waarden gelijk zijn. Hieronder staat een voorbeeld waarbij de operator met een datumwaarde wordt gebruikt. De SQL-query retourneert rijen in de tabel Orders waarbij de OrderDate gelijk is aan 2023-01-01.
-- Select all orders placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate = '2023-01-01';
Ongelijk aan (!= of <>)
De operator != of <> vergelijkt twee waarden en retourneert die welke niet gelijk zijn aan de referentiewaarde. Wanneer hij bijvoorbeeld met een datumwaarde wordt gebruikt, retourneert de operator != of <> rijen die niet gelijk zijn aan de opgegeven datum. Lees ook onze tutorial SQL NOT EQUAL Operator: A Beginner's Guide om de subtiliteiten te leren kennen.
-- Select all orders that were not placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate != '2023-01-01';
-- Alternative syntax using <>
SELECT *
FROM Orders
WHERE OrderDate <> '2023-01-01';
Kleiner dan (<)
De operator < wordt in SQL gebruikt om te controleren of de waarde links kleiner is dan die rechts. Wanneer deze in een SQL-query met datumwaarden wordt gebruikt, retourneert de query records met datums die eerder zijn dan de opgegeven datum. De onderstaande query retourneert bijvoorbeeld rijen in de tabel Orders waarbij de OrderDate eerder is dan 2023-01-01.
-- Select all orders placed before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate < '2023-01-01';
Groter dan of gelijk aan (>=)
De operator >= controleert of waarden links van de operator groter dan of gelijk zijn aan de waarde rechts. Wanneer de operator in SQL wordt gebruikt om een datumwaarde op te vragen, retourneert hij records waarbij de datumwaarden alleen gelijk zijn aan of groter dan de referentiewaarde.
-- Select all orders placed on or after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate >= '2023-01-01';
Kleiner dan of gelijk aan (<=)
De operator <= wordt in SQL gebruikt om te controleren of waarden links van de operator kleiner dan of gelijk zijn aan de waarde rechts. Wanneer de operator wordt gebruikt om een datumwaarde op te vragen, retourneert hij records waarbij de datumwaarden alleen gelijk zijn aan of kleiner dan de referentiewaarde.
-- Select all orders placed on or before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate <= '2023-01-01';
Datumvergelijking in SQL Server
We kunnen in SQL Server datums vergelijken met de volgende operatoren: <, <=, >, >= en =. We behandelen echter het volgende:
De ‘groter dan’-operator (>) gebruiken
De ‘groter dan’-operator (>) wordt in SQL Server gebruikt om datums te filteren die later zijn dan de datum waarmee rechts van de operator wordt vergeleken. De onderstaande query filtert bijvoorbeeld de tabel Orders en retourneert records van bestellingen die zijn geplaatst na OrderDate 2023-01-01.
-- Select all orders delivered after January 1, 2023
SELECT *
FROM Orders
WHERE DeliveryDate > '2023-01-01';
De functie GETDATE() gebruiken
De functie GETDATE() in SQL Server retourneert de huidige datum zoals vastgelegd op het systeem van de gebruiker. Daarom kun je deze functie gebruiken om data op te vragen en rijen te filteren waarbij de datum later is dan de huidige datum.
-- Select all orders delivered after the current date and time
SELECT *
FROM Orders
WHERE DeliveryDate > GETDATE();
BETWEEN gebruiken voor datumbereiken
De operator BETWEEN in SQL wordt gebruikt om waarden binnen een gegeven bereik te filteren. Wanneer deze in SQL Server met datums wordt gebruikt, kun je rijen filteren die datums binnen het opgegeven bereik bevatten. De resultaten bevatten zowel de begin- als de einddatum zoals in de query geschreven.
-- Select all orders delivered between January 1, 2023, and December 31, 2023
SELECT *
FROM Orders
WHERE DeliveryDate BETWEEN '2023-01-01' AND '2023-12-31';
CAST en CONVERT gebruiken voor datumbereiken
Je kunt ook de functies CAST en CONVERT gebruiken om fouten te voorkomen. Deze functies zorgen ervoor dat de datumwaarden correct worden geïnterpreteerd en geformatteerd.
-- Convert a string to a date
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;
-- Convert a string to a datetime
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- Convert a string to a date using CONVERT
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;
-- Convert a string to a datetime using CONVERT
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;
Datumvergelijking in PostgreSQL
PostgreSQL heeft enkele andere clausules die worden gebruikt om datums te vergelijken. We bespreken er hieronder een paar.
De ‘groter dan’-operator (>) gebruiken
Net als in de SQL Server-database filtert de operator > in PostgreSQL datums die later zijn dan de vergelijkingsdatum.
-- Select all orders placed after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
De EXTRACT-functie gebruiken
De functie EXTRACT wordt in PostgreSQL gebruikt om datumvelden zoals jaar, maand of dag op te halen. In de onderstaande query filtert de clausule EXTRACT records voor het JAAR 2023.
-- Select all orders placed in the year 2023
SELECT *
FROM Orders
WHERE EXTRACT(YEAR FROM OrderDate) = 2023;
De INTERVAL-functie gebruiken
De functie INTERVAL wordt in PostgreSQL gebruikt voor enkele datumcalculaties. Met INTERVAL kun je specifieke hoeveelheden tijd bij een datum optellen of ervan aftrekken.
-- Select all orders placed in the last 30 days
SELECT *
FROM Orders
-- Filter orders placed within the last 30 days from the current date
WHERE OrderDate > NOW() - INTERVAL '30 days';
De DATE_PART-functie gebruiken
Met de functie DATE_PART kun je een subveld uit de datumwaarde halen. Dit subveld kan de datum of de tijd zijn. De onderstaande query retourneert bestellingen die in maart zijn geplaatst, waarbij een double-precisionwaarde van 3 wordt gegeven voor de derde maand.
-- Select all orders placed in March
SELECT *
FROM Orders
WHERE DATE_PART('month', OrderDate) = 3;
De TO_DATE-functie gebruiken
De functie TO_DATE in PostgreSQL converteert een opgegeven string naar een datumwaarde op basis van het opgegeven formaat. In de onderstaande query wordt de datumwaarde als string aangeleverd. Je converteert deze dus naar het formaat YYYY-MM-DD.
-- Select all orders placed on January 1, 2023, using a string date
SELECT *
FROM Orders
WHERE OrderDate = TO_DATE('2023-01-01', 'YYYY-MM-DD');
BETWEEN gebruiken voor datumbereiken
Net als in SQL Server filtert de clausule BETWEEN in PostgreSQL data binnen een specifiek bereik. Voor waarden met datums filtert de functie BETWEEN en retourneert rijen tussen de opgegeven datums. Deze datums zijn ook in de resultaten opgenomen.
-- Select all orders placed between January 1, 2023, and December 31, 2023
SELECT *
FROM Orders
WHERE OrderDate BETWEEN '2023-01-01' AND '2023-12-31';
Datumvergelijking in Oracle
De ‘groter dan’-operator (>) gebruiken
De operator > filtert datums die later zijn dan de vergelijkingsdatum.
-- Select all active users with an end date in the future
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
-- Ensure the end date is in the future
AND EndDate > SYSDATE;
NULL-datums en complexe voorwaarden afhandelen
Bij het vergelijken van datums in een Oracle-database is het belangrijk om complexe scenario’s te specificeren, zoals lege datums. In dit geval gebruiken we de clausule IS NULL om records zonder datum te filteren.
-- Select all active users with either a future end date or no end date (NULL)
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
-- Ensure the end date is either in the future or is NULL (no end date)
AND (EndDate > SYSDATE OR EndDate IS NULL);
BETWEEN gebruiken voor datumbereiken
De clausule BETWEEN wordt ook in Oracle gebruikt om data binnen een specifiek bereik te filteren. Voor waarden met datums filtert de functie BETWEEN en retourneert records tussen de opgegeven datums. Deze datums zijn ook in de resultaten opgenomen.
-- Select all active users with an end date between the current date and a specified future date (e.g., end of the year)
SELECT *
FROM Users
-- Filter users with status 'Active'
WHERE Status = 'Active'
-- Ensure the end date is between the current date and a specified future date (e.g., December 31, 2023)
AND EndDate BETWEEN SYSDATE AND DATE '2023-12-31';
Veelvoorkomende valkuilen en best practices
Ik ben problemen tegengekomen met datums en de ‘groter dan’-operator in SQL. Hier zijn enkele veelgemaakte fouten die ik heb ontdekt en tips om ze te vermijden.
Inconsistente datumformaten
Het gebruik van inconsistente datumformaten in je queries leidt tot fouten. Je krijgt mogelijk niet de gewenste resultaten als je datumformaten zoals YYYY-MM-DD en MM-DD-YYYY door elkaar gebruikt.
Gebruik om deze problemen te voorkomen altijd een standaarddatumformaat. Je kunt de datum ook converteren naar je voorkeursformaat of volgens lokale conventies met TO_DATE in PostgreSQL- of Oracle-databases. Voor SQL Server kun je de functies CAST en CONVERT gebruiken.
-- Convert a string to a date
SELECT CAST('2023-06-26' AS DATE) AS ConvertedDate;
-- Convert a string to a datetime
SELECT CAST('2023-06-26 14:30:00' AS DATETIME) AS ConvertedDateTime;
-- Convert a string to a date using CONVERT
SELECT CONVERT(DATE, '2023-06-26') AS ConvertedDate;
-- Convert a string to a datetime using CONVERT
SELECT CONVERT(DATETIME, '2023-06-26 14:30:00') AS ConvertedDateTime;
Tijdzone-afhandeling
Bij het werken met data over meerdere tijdzones kun je onnauwkeurige resultaten ophalen. Bovendien kan het niet meenemen van tijdzoneverschillen tijdens datumconversie fouten veroorzaken.
Daarom raad ik aan je datums in UTC (Coordinated Universal Time) op te slaan en ingebouwde tijdzonefuncties te gebruiken om datums te converteren.
-- Store dates in UTC and convert to local time zone
SELECT *
FROM Orders
-- Filter orders where the OrderDate in UTC is greater than the current date in the 'America/New_York' time zone
WHERE OrderDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'America/New_York';
-- Use time zone functions for accurate comparison
SELECT *
FROM Users
-- Filter users where the EndDate in UTC is greater than the current date in UTC
WHERE EndDate AT TIME ZONE 'UTC' > SYSDATE AT TIME ZONE 'UTC';
Veelgemaakte fouten met datums vermijden
Bij het werken met datums is het belangrijk om fouten te voorkomen door alleen de waarden op te halen die je in je analyse nodig hebt. Je kunt bijvoorbeeld de tijdscomponent in een datumwaarde weglaten als die niet relevant is voor je analyse. Ga expliciet om met NULL-waarden om fouten te voorkomen, vooral waar datumwaarden deze fout kunnen bevatten.
Leesbare en onderhoudbare queries schrijven
Je kunt jezelf betrappen op het schrijven van complexe en geneste queries, waardoor het lastig wordt om de verschillende clausules te lezen en te volgen. Evenzo maakt het weglaten van commentaar in je code het moeilijk om uit te leggen wat die doet.
Daarom raad ik aan om commentaar toe te voegen waarin je de logica achter de clausules uitlegt. Om de queries leesbaar te maken, kun je ook eenvoudige subqueries of Common Table Expressions (CTE’s) gebruiken. Bekijk onze cursus Reporting in SQL om meer te leren over het schrijven van leesbare en onderhoudbare queries voor analyse en rapportage.
Een opmerking over waarom SQL-methoden verschillen
De diversiteit in SQL-methoden voor datumvergelijkingen tussen verschillende databasesystemen zoals SQL Server, PostgreSQL en Oracle komt voort uit de unieke evolutie en ontwerpfilosofieën van elk databasesysteem. Elk systeem is onafhankelijk ontwikkeld en gericht op andere gebruikersbehoeften en compatibiliteitsvereisten, wat heeft geleid tot uiteenlopende implementaties van SQL-standaarden en aanvullende propriëtaire functies.
Bijvoorbeeld:
- SQL Server, ontwikkeld door Microsoft, bevat functies en syntaxis die nauw aansluiten bij andere Microsoft-producten, met als doel integratie en gebruiksgemak binnen het Windows-ecosysteem.
- PostgreSQL is een open-sourceproject met een sterke nadruk op uitbreidbaarheid. Deze flexibiliteit stimuleert een verscheidenheid aan datumfuncties en operatoren die door de community kunnen worden geoptimaliseerd of uitgebreid.
- Oracle richt zich doorgaans op hoge schaalbaarheid en betrouwbaarheid voor bedrijfsapplicaties, wat leidt tot specifieke optimalisaties in hoe datums en andere datatypes worden afgehandeld, vaak met focus op complexe omgevingen met grote transactiestromen.
Conclusie
Ik moedig je aan om de verschillende vaardigheden te oefenen, zodat je weet wanneer je SQL-functies in realistische scenario’s moet toepassen. Overweeg DataCamp’s cursussen SQL Fundamentals en Intermediate SQL. Ik raad ook de cursus Associate Data Analyst in SQL aan voor beginnende data-analisten en data scientists om de verschillende analysetechnieken onder de knie te krijgen. Deze cursussen helpen je ook voorbereiden op de SQL Associate Certification, die sterk staat op je cv.
Veelgestelde vragen
Wat is een vergelijkingsoperator?
Vergelijkingsoperatoren vergelijken twee waarden en geven resultaten terug op basis van of de bewering waar of onwaar is voor de vergeleken waarde.
Wat zijn de gebruikelijke operatoren bij datumwaarden in SQL?
De meest gebruikte operatoren bij datumwaarden in SQL zijn gelijk aan (=), groter dan (>), kleiner dan (<), groter dan of gelijk aan (>=), kleiner dan of gelijk aan (<=).
Wanneer wordt de operator BETWEEN in SQL gebruikt?
De operator BETWEEN wordt gebruikt om records binnen een bepaald bereik te filteren.
Welke operator moet ik gebruiken als mijn datums NULL-waarden bevatten?
Je moet de clausule IS NULL opnemen om null-waarden af te handelen en fouten in queryresultaten te voorkomen.
Wat moet ik doen als mijn SQL-query fouten geeft bij het filteren op datumwaarde?
Controleer of je datums in het juiste formaat staan. Zo niet, converteer ze dan naar een consistent formaat zoals YYYY-MM-DD.

