Question 170

Comment manipuler les dates dans les requêtes SQL ?

Cet article présente les opérations les plus courantes permettant de manipuler les dates dans les requêtes SQL. Chaque base de données possède ses propres conventions et sa propre syntaxe pour la manipulation de dates. Cet article traitera donc plus particulièrement des bases Microsoft Access.

Dans ce qui suit, nous supposons l'existence d'une table nommée "Table1" qui contient entre autre un champ "TheDate", de type DATE.

Dans une requête SQL avec Access, une date sous forme de chaîne de caractères doit s'écrire entre 2 signes "dièse" (#). Par exemple :

sqlQuery = "SELECT * FROM Table1 WHERE TheDate = #12/23/2006#"

Important : le format de date utilisé avec cette syntaxe est "MM/JJ/AAAA", c'est-à-dire MOIS/JOUR/ANNEE.

Une alternative intéressante est l'utilisation de fonctions. On peut utiliser dans les requêtes SQL destinées à une base Access bon nombre des fonctions de manipulation de dates, qui sont similaires aux fonctions de Visual Basic : CDate(), Year(), Month(), DatePart(), etc.

Ainsi, on peut utiliser la très utile fonction CDate() (similaire à celle de VB), qui permet de convertir une chaîne de caractère en date. Notre requête SQL peut donc devenir :

sqlQuery = "SELECT * From Table1 WHERE TheDate = CDate(""01/12/2006"")"

Le format à utiliser est le format qui correspond aux options locales de la base de données. Ainsi, si les dates sont dans la base au format JJ/MM/AAAA, on fournira la date dans le même format dans la requête.
Il est important de noter que la fonction CDate utilisée ici est celle du moteur Jet! La fonction fait partie de la requête. Noter aussi le doublage des guillemets autour de la date. Voir à ce sujet : Comment insérer des guillemets dans une chaîne de caractères?

L'opérateur BETWEEN ("entre") est bien pratique pour sélectionner des enregistrements dans un intervalle de dates. Par exemple, la requête suivante sélectionne les enregistrements dont la date est comprise entre le premier avril 2006 et le 15 décembre 2006 :

SELECT *
FROM table1
WHERE TheDate BETWEEN #4/1/2006# AND #12/15/2006#

On peut faire la même chose avec CDate(), comme ceci :

SELECT *
FROM table1
WHERE TheDate BETWEEN Cdate("1/4/2006") AND Cdate("15/12/2006")

Terminons par un exemple complet, l'affichage de tous les enregistrements dont la date est postérieure à une date donnée en paramètre, sous forme de chaîne de caractères :

pDate = "23/08/2006"
     
sqlQuery = "SELECT * From Table1 WHERE TheDate > CDate("" " & pDate & " "") "

Notez la syntaxe un peu "lourde" due à l'obligation de doubler les guillemets dans les chaînes de caractères!

Voir aussi :

Date de publication : 13 septembre 2007
Dernière modification : 06 mars 2008
Rubriques : Bases de données
Mots-clés : date, sql, base de données, conversion, format