MySQL retourne et affiche les valeurs de type TIME
aux formats 'HH:MM:SS'
ou 'HHH:MM:SS'
. Les valeurs de type TIME
vont de '-838:59:59'
à '838:59:59'
. Le nombre d'heure peut être rendu aussi grand afin de pouvoir représenter les heures du jour, mais aussi de faire des calculs de différence d'heure entre deux jours, ce qui conduit à des durée très supérieures à 24h, voire même des valeurs négatives.
Les valeurs de type TIME
peuvent être définies de nombreuses manières différentes :
- Une chaîne de format
'HH:MM:SS'
. Les :' ne sont pas obligatoires, et ils peuvent être remplacé par n'importe quel caractère non numérique. Par exemple, , '10:11:12'
et '10.11.12'
sont équivalents..
- Une chaîne sans délimiteurs, au format
'HHMMSS'
, en supposant qu'elle est un sens en tant que date. Par exemple, '101112'
sera interpreté comme '10:11:12'
, mais '109712'
n'est pas valide et deviendra '00:00:00'
.
- Un nombre au format
HHMMSS
, en supposant que cela ait un sens. Par exemple, 101112
vaudra . '10:11:12'
- Le résultat d'une fonction qui retourne une valeur acceptable en dans un contexte de
DATETIME
, DATE
or TIMESTAMP
, comme NOW()
or CURRENT_DATE.
Pour les valeurs de type TIME
spécifiées au format chaîne avec des délimiteurs, il n'est pas nécessaire de préciser les deux chiffres pour les heures, minutes ou secondes. Ainsi, '8:3:2'
et '08:03:02'
.sont identiques.
Attention aux affections de valeurs courtes dans une colonne de type TIME
. MySQL interprète les valeurs en supposant que les chiffres de gauche sont les secondes (MySQL interprète les valeurs de type TIME
comme des intervalles de temps, plutôt qu'une date). Par exemple, '11:12'
, '1112'
et 1112
pourraient être confondues avec '11:12:00'
(12 minutes après 11 heures), mais MySQL le comprend comme '00:11:12'
(11 minutes, 12 seconds). De même, '12'
et 12
representent '00:00:12'
.
Toutes les valeurs de TIME
, qui sont hors de l'intervalle de validité sont ramenées à la valeur valide la plus proche. Ainsi, '-850:00:00'
et '850:00:00'
sont respectivement converties en'-838:59:59'
et '838:59:59'
.
Toutes les valeurs invalides de TIME
sont converties en '00:00:00'
. Il faut bien savoir que '00:00:00'
est une valeur de TIME
valide. Ainsi, si est stocké dans une table, il est impossible de dire si cela provient d'une erreur, ou si il a été affecté à cette valeur.