-
SQL > Les dates
SELECT PAR RAPPORT A UNE DATE
SELECT * FROM ma_table WHERE colonne > date('2019-09-16')
SELECT * FROM ma_table WHERE year(colonne) > date('2019-09-16') AND month(colonne) > date('2019-09-16')
LES TYPES DE DATE
Type DATE : "AAAA-MM-JJ"
CURDATE()etCURRENT_DATE()retournent la date courante au format "AAAA-MM-JJ".INSERT INTO ma_table (nom_colonne) VALUES (CURDATE())
Type TIME : "HH:MM:SS"
CURTIME()etCURRENT_TIME()retournent l’heure courante au format "HH:MM:SS".INSERT INTO ma_table (nom_colonne) VALUES (CURTIME())
Type DATETIME : "AAAA-MM-JJ HH:MM:SS"
La fonction
NOW()ainsi queCURRENT_TIMESTAMP()retournent la date au format "AAAA-MM-JJ HH:MM:SS".INSERT INTO ma_table (nom_colonne) VALUES (NOW())
CONVERTIR DES DATES
DATE_FORMAT()
DATE_FORMAT(date, format)
transforme une date donnée au format indiqué.
%d/%m/%Y→01/12/2006(format français)%W %e %M→Monday 5 December(noms en anglais)%X %V→2007 51(année et numéro de la semaine)SELECT DATE_FORMAT('2006-10-25 14:27:39', '%d/%m/%Y') → 25/10/2006
STR_TO_DATE(date, format)
transforme la date donnée avec son format que vous devez indiquer en une date de type
DATETIME (AAAA-MM-JJ).SELECT STR_TO_DATE('25/10/2006 14:27:39','%d/%m/%Y %T') → 2006-10-25 14:27:39
%Test l’heure au format HH:MM:SS.TIME_TO_SEC() : convertir une heure en secondes
TIME_TO_SEC(heure)
SELECT TIME_TO_SEC('05:30:00') → 19800
UNIX_TIMESTAMP() : convertir une date en timestamp
UNIX_TIMESTAMP(date)(datepeut être de type DATE ou DATETIME).SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00') → 875996580
MAKEDATE() : création de date
MAKEDATE(année, jourdelannee)
crée une date au format DATE (
AAAA-MM-JJ) à partir de deux éléments : l’année et le jour de l’année.SELECT MAKEDATE(2004,365) → 2004-12-31
MAKETIME() : création de temps
MAKETIME(heure, minutes, secondes)
crée une heure au format TIME (
HH:MM:SS) à partir de 3 éléments : l’heure, les minutes et les secondes.SELECT MAKETIME(14,55,20) → 14:55:20
CALCULS ENTRE DATES
DATEDIFF() : différence entre deux dates
DATEDIFF(date1, date2) SELECT DATEDIFF('2007-01-02', '2007-01-08') → 6
calcule le nombre de jours entre
date1etdate2. Les dates sont de type DATE ou DATETIME (mais l’heure est ignorée).DATE_ADD() : ajouter un intervalle
DATE_ADD(date, INTERVAL nbre type) DATE_ADD('2005-05-15 12:00:00', INTERVAL 5 DAY) → 2005-05-20 12:00:00 DATE_ADD('2000-01-01', INTERVAL 7 YEAR); → 2007-01-01 DATE_ADD('2007-06-15 12:00:00',INTERVAL '2:30:00' HOUR_SECOND) → 2007-06-15 14:30:00
ajoute l’intervalle de temps
nbrede typetypeà la date donnée.datepeut être au format DATE ou au format DATETIME.typeaccepte les valeurs suivantes :HOUR-DAY-WEEK-MONTH-YEARATTENTION : ne pas faire les accords du pluriel >
INTERVAL 5 DAYS≠INTERVAL 5 DAYDATE_SUB() : soustraire un intervalle
DATE_SUB(date, INTERVAL expression type)soustrait l’intervalle de temps expression du typetype à la date donnée.
Les arguments sont les mêmes que pour la fonction DATE_ADD()
SELECT DATE_SUB('2004-01-05', INTERVAL 31 DAY); → 2003-12-05
SELECT DATE_SUB('2006-10-01', INTERVAL '6-5' YEAR_MONTH); → 2000-05-01
ATTENTION : ne pas faire les accords du pluriel !
INTERVAL 5 DAYS≠INTERVAL 5 DAYExercices
Exercice 1
sélection des pseudos de la table membres qui se sont inscrit (champ inscription) à 22 heures.
-
HOUR()retourne le nombre d’heures que vous donnez au format TIME ou DATETIME.-
MINUTE()retourne le nombre de minutes que vous donnez au format TIME ou DATETIME.-
SECOND(heure)retourne les secondes.SELECT pseudo FROM membres WHERE HOUR(inscription) = 22
Exercice 2
sélectionner les pseudos de la table membres qui se sont inscrits (champ inscription) il y a plus de 100 jours.
-
TO_DAYS(date)retourne le nombre de jours depuis la date 0 jusqu’à la date indiquée.Exemple :
TO_DAYS(’1997-10-07′)-->729669SELECT pseudo FROM membres WHERE TO_DAYS(NOW()) - TO_DAYS(inscription) > 100
Calculer l’ancienneté d’un membre : différence entre le moment de la requête et celui de l’inscription.
Optimisation du script de news
Pour stocker la date à laquelle la news est postée, il faut utiliser un champ de type DATETIME.
Il faut désormais enregistrer les dates au format voulu, soit "
AAAA-MM-JJ HH-MM-SS" grâce à la fonction NOW() :mysql_query("INSERT INTO news VALUES('', '" . $titre . "', '" . $contenu . "', NOW())")
Enfin, l’affichage des news :
<p>le <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></p>