Course
Maîtriser les comparaisons de dates SQL : Comment rechercher des dates supérieures à une date spécifique ?
Pour une gestion et une analyse efficaces des bases de données, il est essentiel de savoir comment rechercher les dates supérieures à une date spécifique. Ce tutoriel fournit un guide complet pour effectuer des comparaisons de dates en SQL à travers différents systèmes de bases de données SQL, y compris SQL Server, PostgreSQL et Oracle. Qu'il s'agisse d'analyser des données historiques, d'établir des rapports ou de filtrer des enregistrements, la maîtrise de cette technique vous permettra d'améliorer vos capacités d'interrogation SQL.
À la fin de ce guide, vous serez en mesure de :
- Comprendre les nuances des formats et des fonctions de date dans différentes bases de données SQL, y compris SQL Server, PostgreSQL et Oracle.
- Appliquer des exemples pratiques à des scénarios du monde réel.
Si vous êtes un analyste de données ou un scientifique de données prêt à en apprendre davantage, je vous recommande de suivre la piste de compétences SQL Fundamentals de DataCamp pour vous familiariser avec l'interrogation de données à partir de bases de données. Vous pouvez également suivre le cours Création de bases de données PostgreSQL pour maîtriser les tenants et les aboutissants de PostgreSQL.
Introduction aux comparaisons de dates SQL
La comparaison de dates est importante en SQL car elle permet aux professionnels des données de filtrer et de trier les données au cours de l'analyse. Cette méthode est particulièrement utile pour les rapports financiers ou la gestion des stocks, qui nécessitent une analyse des tendances.
L'opérateur SQL "plus grand que" (>
) est utilisé avec les dates pour comparer deux valeurs de date. Lorsque vous incluez l'opérateur "plus grand que" dans une requête SQL contenant des dates, la requête renvoie les enregistrements dont la date est postérieure à la date spécifiée. Par exemple, la requête ci-dessous renverra les lignes de la table Orders
dont l'adresse OrderDate
est postérieure à l'adresse 2023-01-01
.
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Commençons par passer rapidement en revue les opérateurs SQL de base qui peuvent être utilisés pour filtrer les données. Ces opérateurs sont également abordés dans notre aide-mémoire sur les bases du langage SQL, que vous pouvez consulter avant d'essayer les exemples ci-dessous.
Egal à (=)
L'opérateur =
est utilisé en SQL pour comparer l'égalité de deux valeurs. Vous trouverez ci-dessous un exemple d'utilisation de l'opérateur avec une valeur de date. La requête SQL renverra des lignes dans la table Orders
où OrderDate
est égal à 2023-01-01
.
-- Select all orders placed on January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate = '2023-01-01';
Non égal à (!= ou <>)
L'opérateur !=
ou <>
vérifie deux valeurs et renvoie celles qui ne sont pas identiques à celles référencées. Par exemple, lorsqu'il est utilisé avec une valeur de date, l'opérateur !=
ou <>
renverra des lignes qui ne sont pas identiques à la date référencée. Vous pouvez également consulter notre site SQL NOT EQUAL Operator : Guide du débutant tutoriel pour apprendre les subtilités.
-- 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';
Moins que (<)
L'opérateur <
est utilisé en SQL pour vérifier si la valeur de gauche est plus petite que celle de droite. Lorsqu'elle est utilisée dans une requête SQL avec des valeurs de date, la requête renvoie les enregistrements dont la date est antérieure à la date spécifiée. Par exemple, la requête ci-dessous renverra les lignes de la table Orders
dont l'adresse OrderDate
est antérieure à 2023-01-01
.
-- Select all orders placed before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate < '2023-01-01';
Supérieur ou égal à (>=)
L'opérateur >=
vérifie si les valeurs situées à gauche de l'opérateur sont supérieures ou égales à la valeur située à droite. Lorsque l'opérateur est utilisé en SQL pour interroger une valeur de date, il renvoie les enregistrements dont les valeurs de date sont seulement égales ou supérieures à la valeur à laquelle il est fait référence.
-- Select all orders placed on or after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate >= '2023-01-01';
Inférieur ou égal à (<=)
L'opérateur <=
est utilisé en SQL pour vérifier si les valeurs situées à gauche de l'opérateur sont inférieures ou égales à la valeur située à droite. Lorsque l'opérateur est utilisé pour interroger une valeur de date, il renvoie les enregistrements dont les valeurs de date sont inférieures ou égales à la valeur référencée.
-- Select all orders placed on or before January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate <= '2023-01-01';
Comparaison de dates dans SQL Server
Nous pouvons comparer des dates dans SQL Server en utilisant les opérateurs suivants : <
, <=
, >
, >=
, et =
. Toutefois, nous couvrirons les points suivants :
Utilisation de l'opérateur "plus grand que" (>)
L'opérateur "supérieur à" (>
) est utilisé dans SQL Server pour filtrer les dates postérieures à la date comparée du côté droit de l'opérateur. Par exemple, la requête ci-dessous filtre la table Orders
et renvoie les enregistrements des commandes passées après OrderDate
2023-01-01
.
-- Select all orders delivered after January 1, 2023
SELECT *
FROM Orders
WHERE DeliveryDate > '2023-01-01';
Utilisation de la fonction GETDATE()
La fonction GETDATE()
du serveur SQL renvoie la date actuelle telle qu'elle est enregistrée dans le système de l'utilisateur. Vous pouvez donc utiliser cette fonction pour interroger des données et filtrer les lignes dont la date est supérieure à la date actuelle.
-- Select all orders delivered after the current date and time
SELECT *
FROM Orders
WHERE DeliveryDate > GETDATE();
Utilisation de l'option ENTRE pour les plages de dates
L'opérateur BETWEEN
en SQL est utilisé pour filtrer les valeurs comprises dans un intervalle donné. Lorsqu'il est utilisé dans SQL Server avec des dates, vous pouvez filtrer les lignes contenant des dates comprises dans la date indiquée. Les résultats incluront les dates de début et de fin telles qu'elles sont écrites dans la requête.
-- 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';
Utilisation de CAST et CONVERT pour les plages de dates
Vous pouvez également utiliser les fonctions CAST
et CONVERT
pour éviter les erreurs. Ces fonctions garantissent que les valeurs de la date sont correctement interprétées et formatées.
-- 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;
Comparaison de dates dans PostgreSQL
PostgreSQL dispose de différentes clauses utilisées pour comparer les dates. Nous en examinons quelques-unes ci-dessous.
Utilisation de l'opérateur "plus grand que" (>)
Comme pour la base de données SQL Server, l'opérateur >
de PostgreSQL filtre les dates supérieures à la date de comparaison.
-- Select all orders placed after January 1, 2023
SELECT *
FROM Orders
WHERE OrderDate > '2023-01-01';
Utilisation de la fonction EXTRACT
La fonction EXTRACT
est utilisée dans PostgreSQL pour récupérer des champs de date tels que l'année, le mois ou le jour. Dans la requête ci-dessous, la clause EXTRACT
filtre les enregistrements de l'ANNÉE 2023.
-- Select all orders placed in the year 2023
SELECT *
FROM Orders
WHERE EXTRACT(YEAR FROM OrderDate) = 2023;
Utilisation de la fonction INTERVALLE
La fonction INTERVAL
est utilisée dans PostgreSQL pour effectuer certains calculs de date. INTERVAL
vous permet d'ajouter ou de soustraire des quantités spécifiques de temps à une date.
-- 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';
Utilisation de la fonction DATE_PART
La fonction DATE_PART
permet d'extraire un sous-champ de la valeur de la date. Cette sous-zone peut contenir la date ou l'heure. La requête ci-dessous renvoie les commandes passées en mars, ce qui donne une valeur de double précision de 3 pour le troisième mois.
-- Select all orders placed in March
SELECT *
FROM Orders
WHERE DATE_PART('month', OrderDate) = 3;
Utilisation de la fonction TO_DATE
La fonction TO_DATE
de PostgreSQL convertit une chaîne de caractères donnée en une valeur de date basée sur le format donné. Dans la requête ci-dessous, la valeur de la date est fournie sous forme de chaîne de caractères. Vous convertissez donc la date au format 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');
Utilisation de l'option ENTRE pour les plages de dates
Comme pour SQL Server, la clause BETWEEN de PostgreSQL filtre les données dans un intervalle spécifique. Pour les valeurs contenant des dates, la fonction BETWEEN
filtre et renvoie les lignes entre les dates indiquées. Ces dates sont également incluses dans les résultats.
-- 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';
Comparaison de dates dans Oracle
Utilisation de l'opérateur "plus grand que" (>)
L'opérateur >
filtre les dates postérieures à la date de comparaison.
-- 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;
Traitement des dates NULL et des conditions complexes
Lorsque vous comparez des dates dans une base de données Oracle, il est important de spécifier des scénarios complexes, tels que des dates vides. Dans ce cas, nous utilisons la clause IS NULL
pour filtrer les enregistrements sans date.
-- 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);
Utilisation de l'option ENTRE pour les plages de dates
La clause BETWEEN
est également utilisée dans Oracle pour filtrer les données à l'intérieur d'une plage spécifique. Pour les valeurs contenant des dates, la fonction BETWEEN
filtre et renvoie les enregistrements entre les dates indiquées. Ces dates sont également incluses dans les résultats.
-- 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';
Pièges courants et meilleures pratiques
J'ai rencontré des problèmes avec les dates et l'opérateur "plus grand que" dans SQL. Voici quelques erreurs courantes que j'ai découvertes et des conseils pour les éviter.
Formats de date incohérents
L'utilisation de formats de date incohérents dans vos requêtes entraînera des erreurs. Vous risquez de ne pas obtenir les résultats souhaités si vous mélangez des formats de date tels que YYYY-MM-DD
et MM-DD-YYYY
.
Pour éviter ces problèmes, veillez à toujours utiliser le format de date standard. Vous pouvez également convertir la date dans le format de votre choix ou selon les conventions locales en utilisant TO_DATE
dans les bases de données PostgreSQL ou Oracle. Pour SQL Server, vous pouvez utiliser les fonctions CAST
et CONVERT
.
-- 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;
Gestion des fuseaux horaires
Vous risquez d'obtenir des résultats inexacts lorsque vous traitez des données sur plusieurs fuseaux horaires. En outre, le fait de ne pas tenir compte des différences de fuseaux horaires lors de la conversion des dates peut entraîner des erreurs.
C'est pourquoi je vous recommande d'enregistrer vos dates en UTC (temps universel coordonné) et d'utiliser les fonctions de fuseau horaire intégrées pour convertir les dates.
-- 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';
Éviter les erreurs courantes avec les dates
Lorsque vous travaillez avec des dates, il est important d'éviter les erreurs en ne récupérant que les valeurs dont vous avez besoin dans votre analyse. Par exemple, vous pouvez omettre la composante temporelle d'une valeur de date si elle n'est pas pertinente pour votre analyse. Traitez les valeurs NULL
de manière explicite pour éviter les erreurs, en particulier lorsque les valeurs de date peuvent contenir l'erreur.
Rédiger des requêtes lisibles et faciles à maintenir
Vous pouvez vous retrouver à écrire des requêtes complexes et imbriquées, ce qui rend difficile la lecture et le suivi des différentes clauses. De même, si vous n'incluez pas de commentaires dans votre code, il est difficile d'expliquer ce qu'il fait.
Je vous recommande donc d'inclure des commentaires expliquant la logique qui sous-tend les clauses. Pour rendre les requêtes plus lisibles, vous pouvez également utiliser des sous-requêtes simples ou des Common Table Expressions (CTE). Consultez notre cours Reporting en SQL pour en savoir plus sur l'écriture de requêtes lisibles et faciles à maintenir pour l'analyse et le reporting.
Pourquoi les méthodes SQL diffèrent-elles ?
La diversité des méthodes SQL pour les comparaisons de dates entre différents systèmes de base de données tels que SQL Server, PostgreSQL et Oracle provient de l'évolution unique et des philosophies de conception de chaque système de gestion de base de données. Chaque système a été développé indépendamment et a répondu à des besoins différents des utilisateurs et à des exigences de compatibilité, ce qui a conduit à des implémentations variées des normes SQL et à des fonctionnalités propriétaires supplémentaires.
Par exemple :
- SQL Server, développé par Microsoft, incorpore des fonctions et une syntaxe qui s'alignent étroitement sur les autres produits Microsoft, dans un souci d'intégration et de facilité d'utilisation dans l'écosystème Windows.
- PostgreSQL est un projet open-source qui met l'accent sur l'extensibilité. Cette flexibilité encourage une variété de fonctions et d'opérateurs de date qui peuvent être optimisés ou étendus par sa communauté.
- Oracle se concentre généralement sur l'évolutivité et la fiabilité des applications d'entreprise, ce qui conduit à des optimisations spécifiques dans la manière dont les dates et d'autres types de données sont traités, souvent en mettant l'accent sur des environnements transactionnels complexes et à fort volume.
Conclusion
Je vous encourage à pratiquer les différentes compétences pour savoir quand appliquer les fonctions SQL dans des scénarios réels. Envisagez de suivre les cours SQL Fundamentals et Intermediate SQL de DataCamp. Je recommande également la formation Associate Data Analyst in SQL aux aspirants analystes de données et data scientists pour vous aider à maîtriser les différentes techniques d'analyse. Ces cours vous aideront également à vous préparer à la certification SQL Associate, qui est un atout majeur sur un CV.
Obtenez une certification SQL de haut niveau
Démontrez vos compétences de base en SQL et faites progresser votre carrière dans le domaine des données.
Questions fréquemment posées
Qu'est-ce qu'un opérateur de comparaison ?
Les opérateurs de comparaison comparent deux valeurs et renvoient des résultats indiquant si les valeurs sont vraies ou fausses à partir de la valeur comparée.
Quels sont les opérateurs couramment utilisés dans les valeurs de date SQL ?
Les opérateurs couramment utilisés dans les valeurs de date SQL sont les suivants : égal à (=
), supérieur à (>
), inférieur à (<
), supérieur ou égal à (>=
), inférieur ou égal à (<=
).
Quand l'opérateur BETWEEN est-il utilisé en SQL ?
L'opérateur BETWEEN
permet de filtrer les enregistrements dans une certaine fourchette.
Quel opérateur dois-je utiliser si mes dates ont des valeurs NULL ?
Vous devez inclure la clause IS NULL
pour gérer les valeurs nulles et éviter les erreurs dans les résultats de la requête.
Que dois-je faire si ma requête SQL renvoie des erreurs lors du filtrage de la valeur de la date ?
Vérifiez que le format de vos dates est correct. Si ce n'est pas le cas, convertissez-les dans un format cohérent comme YYYY-MM-DD
.
Apprenez SQL avec DataCamp
Course
SQL intermédiaire
Course
Jointure de données en SQL
blog
Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024
blog
Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux
Nisha Arya Ahmed
20 min