Les champs de type date



Dans ce chapitre, je vous propose d'améliorer un peu le mini-chat que nous avons créé dans un précédent TP.

Saviez-vous qu'il était possible de modifier la structure d'une table après sa création ? On peut en effet y ajouter (figure suivante) ou y supprimer des champs à tout moment. Ouvrez la table minichat dans phpMyAdmin, onglet « Structure ». Cherchez en bas de la page le formulaire « Ajouter 1 champ en fin de table » et cliquez sur le bouton « Exécuter ».



Ajout d'un champ dans phpMyAdmin



Un formulaire apparaît, vous proposant de créer un nouveau champ. C'est l'occasion de passer en revue les différents types de champs qui permettent de stocker des dates.


Les différents types de dates

Voici les différents types de dates que peut stocker MySQL :

  • DATE : stocke une date au format AAAA-MM-JJ (Année-Mois-Jour) ;
  • TIME : stocke un moment au format HH:MM:SS (Heures:Minutes:Secondes) ;
  • DATETIME : stocke la combinaison d'une date et d'un moment de la journée au format AAAA-MM-JJ HH:MM:SS. Ce type de champ est donc plus précis ;
  • TIMESTAMP : stocke une date et un moment sous le format AAAAMMJJHHMMSS ;
  • YEAR : stocke une année, soit au format AA, soit au format AAAA.


Cela fait beaucoup de choix ! Dans la pratique, je vous invite à retenir surtout DATE (AAAA-MM-JJ) quand le moment de la journée importe peu, et DATETIME (AAAA-MM-JJ HH:MM:SS) quand vous avez besoin du jour et de l'heure précise à la seconde près.


Créez un champ nommé date de type DATETIME comme sur la figure suivante.



Création d'un champ de date



Bien que cela fonctionne avec MySQL, il est parfois préférable de donner un autre nom au champ que date. En effet, c'est un mot-clé du langage SQL, ce qui peut provoquer des erreurs avec d'autres systèmes de bases de données comme Oracle.
Vous pourriez par exemple nommer le champ comme ceci : date_creation, ou encore date_modification.


Utilisation des champs de date en SQL

Les champs de type date s'utilisent comme des chaînes de caractères : il faut donc les entourer d'apostrophes. Vous devez écrire la date dans le format du champ.

Par exemple, pour un champ de type DATE :

SELECT pseudo, message, date FROM minichat WHERE date = '2010-04-02'

… vous renverra la liste des messages postés le 02/04/2010 (2 avril 2010).


Si le champ est de type DATETIME (comme c'est le cas pour notre nouveau mini-chat), il faut aussi indiquer précisément les heures, minutes et secondes :

SELECT pseudo, message, date FROM minichat WHERE date = '2010-04-02 15:28:22'

Cela vous renverra la liste des messages postés le 02/04/2010 à 15h28min22s.


Bon : je reconnais que c'est un peu précis, il est peu probable que beaucoup de messages aient été postés à ce moment exact.

En revanche, et c'est là que les champs de date deviennent réellement intéressants, vous pouvez utiliser d'autres opérateurs que le signe égal. Par exemple, on peut obtenir la liste de tous les messages postésaprès cette date :

SELECT pseudo, message, date FROM minichat WHERE date >= '2010-04-02 15:28:22'


Ou même la liste de tous les messages postés entre le 02/04/2010 et le 18/04/2010 :

SELECT pseudo, message, date FROM minichat WHERE date >= '2010-04-02 00:00:00' AND date <= '2010-04-18 00:00:00'


En SQL, pour récupérer des données comprises entre deux intervalles, comme ici, il y a une syntaxe plus simple et plus élégante avec le mot-clé BETWEEN qui signifie « entre ». On pourrait écrire la requête précédente comme ceci :

SELECT pseudo, message, date FROM minichat WHERE date BETWEEN '2010-04-02 00:00:00' AND '2010-04-18 00:00:00'

Cela signifie : « récupérer tous les messages dont la date est comprise entre 2010-04-02 00:00:00 et 2010-04-18 00:00:00 ». Vous pouvez aussi utiliser cette syntaxe sur les champs contenant des nombres.


Si vous voulez insérer une entrée contenant une date, il suffit là encore de respecter le format de date de la base de données :

INSERT INTO minichat(pseudo, message, date) VALUES('Mateo', 'Message !', '2010-04-02 16:32:22')

Créé avec HelpNDoc Personal Edition: Faites de la Documentation un jeu d'enfant avec l'interface utilisateur propre et efficace de HelpNDoc