Les différents types de données concernant les dates sont :
Puisque aucun type n'est prévu lorsqu'on veut stocker juste un jour de la semaine, juste un jour du mois, ou juste un mois, quel est le type le plus approprié qu'on utilisera pour ça ?
Une date au format chaîne de caractères s'écrit ainsi :
Le Timestamp Unix représente le nombre de secondes écoulées depuis le 1er janvier 1970 à 00h00. Par exemple, voici le timestamp actuel :
1686172678
Bien qu'il existe des fonctions (MySQL et PHP) pour afficher et manipuler ce format, aucun type de données MySQL ne correspond à ce format (même pas le type TIMESTAMP).
En SQL, le format standard est : #MM/JJ/AA#.
Ce format est utilisable par exemple sous Access, SQL Server ou Oracle. Mais MySQL ne le gère pas du tout.
Les fonctions pour renvoyer la date courante sont (UTC signifie Coordinated Universal Time) :
SELECT NOW()
SELECT CURDATE()
SELECT CURTIME()
|
SELECT UTC_TIMESTAMP()
SELECT UTC_DATE()
SELECT UTC_TIME()
|
Pas trouvé : ceux qui trouvent sont priés de le rajouter en commentaire en bas de cette page
La fonction MySQL pour renvoyer le Timestamp Unix est :
UNIX_TIMESTAMP() |
1686172678 |
La fonction MySQL pour convertir un Timestamp Unix en chaîne de caractères est :
FROM_UNIXTIME(1686172678) |
2023-06-07 23:17:58 |
Les fonctions pour extraire une partie de la date sont :
Annee |
2023 |
Mois |
6 |
JourDuMois |
7 |
JourDeLaSemaine |
2 |
Heures |
23 |
Minutes |
17 |
Secondes |
58 |
La fonction extract
permet d'extraire plusieurs valeurs en une seule fois. Par exemple, pour extraire l'année et le mois :
AnnéeMois |
202306 |
Certaines fonctions MySQL permettent de manipuler très simplement les intervalles de dates. Par exemple, quel jour serons-nous dans 100 jours ?
Dans 100 jours nous serons le : |
2023-09-15 |
Exemple : quels sont les réponses aux TP données depuis moins d'une semaine par les BTS SIO 1 ?
select concat(usr_first_name, ' ', usr_name) as nom, tp_date, tp_rep
FROM user, cours_tp_rep
WHERE usr_id = tp_usr_id
AND usr_special & 4
AND tp_date > NOW() - INTERVAL 7 DAY
Un magasin a fait une promotion sur le produit n°346, du 10 décembre au 15 décembre. Il veut savoir combien d'achats il y a eu pendant cette période :
SELECT COUNT(achats) as nbAchats FROM Achete WHERE numProduit = 346 AND date BETWEEN '2011-12-10' AND '2011-12-15'
Le BETWEEN ne fonctionne pas qu'avec les dates, mais aussi avec les valeurs numériques et les chaînes quelconques.
echo time();
1686172678
echo date("Y-m-d H:i");
2023-06-07 23:17
echo strtotime("2023-06-07");
1686088800
echo microtime();
0.55268600 1686172678
echo microtime(true);
1686172678.5527
C'est très pratique pour chonométrer le temps d'exécution de nos programmes ou de nos requêtes.
Quels sont les clients (Prénom, Nom) qui ont acheté au moins un produit l'année dernière ?
Quels sont les clients (Prénom, Nom) qui ont acheté au moins un produit depuis moins de 180 jours ?
Quels sont les clients qui n'ont encore rien acheté ce mois-ci ?
Ecrivez une requête SQL qui affiche le premier jour du mois précédent. Par exemple, si nous sommes le 7 juin 2023, la requête doit afficher 2023-5-01 (cette réponse est éligible à la qualité de réponse parfaite si elle fonctionne même en janvier).
Ecrivez une requête SQL qui affiche la date de lundi prochain. Par exemple, si nous sommes le 7 juin 2023, la requête doit nous afficher 2023-06-12.