http://toptech.geekaddict.net/
l existe 5 types temporels.
Attention, utilisateurs de PHP, il y a deux faux-amis dans ce groupe-là.
TIME n'a rien en commun avec le fonction time() de php
Et TIMESTAMP n'est pas non plus le timestamp Unix.
En SQL, on stocke la date et l'heure comme ça :
Type de colonne Taille
(en octets) Numérique
ou chaîne Format
TIME 3 Chaîne HH:MM:SS
TIMESTAMP 4 Numérique AAAAMMJJHHMMSS
DATETIME 8 (dont 3 non utilisés) Chaîne AAAA-MM-JJ HH:MM:SS
DATE 3 Chaîne AAAA-MM-JJ
YEAR 1 Numérique AAAA
Les données ont des limites logiques, les minutes et secondes sont comprises entre 0 et 59, les heures entre 0 et 23, les jours entre 1 et 28 à 31 selon le mois, les mois entre 1 et 12.
Seules les années sont un peu spéciales. En gros, elles prennent la place qu'il reste donc ça varie selon le type de champ.
DATE et DATETIME : La documentation MySQL donne pour intervale de validié : 1000 à 9999. En pratique, on peut même aller de 0 à 9999 tout comme on peut insérer 0 pour le jour ou le mois. Mais cela est vivement déconseillé car les fonctions de date pourraient avoir des comportement imprévus.
TIMESTAMP va de 19700101000000 à 20380119041407 (du 1er janvier 1970 au 19 janvier 2038 à 4h14 07). Il est donc conseillé de vérifier que l'année soit comprise entre 1970 et 2038 avant d'insérer une valeur dans ce type de champ.
YEAR est limité à 1 octet et donc ses bornes sont 1901 et 2155. Si vous insérez un nombre compris entre 0 et 69, il lui sera automatiquement ajouté 2000, si vous insérez un nombre compris entre 70 et 99, il lui sera ajouté 1900.
Attention, toute valeur non inclue dans les intervales cités ci-avant sera remplacé par un "zéro" dont le format et le type (numérique ou texte) suit le format de la colonne (voire tableau ci-dessus).
Ne négligez pas ces types, de nombreuses fonctions leurs sont associées.
Voilà un peu tout ce que vous pouvez faire avec des champ de type temporel.
CURRENT_DATE() ou CURDATE() pour obtenir la date courante (exemple : 2009-05-21)
CURRENT_TIME() ou CURTIME() pour obtenir l'heure (exemple : 19:02:43)
CURRENT_TIMESTAMP() ou NOW() pour obtenir la date et l'heure (exemple : 2009-05-21 19:02:43)
Les champs ci-dessus peuvent être convertis en entier en faisant CURTIME()+0 qui donne 190243
YEAR() récupère l'année d'un champs (exemple : YEAR(`date`) donne 2007)
MONTH() récupère le mois
DAYOFMONTH() récupère le jour du mois
HOUR() récupère l'heure
MINUTE() récupère la minute
SECOND() récupère la seconde
MONTHNAME() récupère le nom anglais du mois
DAYNAME() récupère le nom anglais du jour de la semaine
Code : SQL - Exemple d'utilisation - Sélectionner
1
2
3
4
5
6
7
8
9
SELECT
CONCAT(
DAYNAME(`date`)," ",
DAYOFMONTH(`date`)," ",
MONTHNAME(`date`)," ",
YEAR(`date`)
)
AS dateformatee
FROM `table`
Ce code renverra par exemple :
Code : Autre - Résultat - Sélectionner
1
2
3
4
5
6
+--------------------------+
| dateformatee |
+--------------------------+
| Tuesday 8 September 2009 |
| Saturday 12 January 2008 |
+--------------------------+
Vous pouvez enfin comparer tous les champs de type temporel avec >, <, =...