Le format d'une valeur de DATE
est
'YYYY-MM-DD'
. En accord avec ANSI SQL, aucun
autre format n'est autorisé. Vous devez utiliser ce format dans
les UPDATE
et les clauses
WHERE
des requêtes
SELECT
. Par exemple :
mysql> SELECT * FROM nom_de_table WHERE date >= '1997-05-05';
MySQL convertit automatiquement une date en nombre si la date
est utilisée dans un contexte numérique (et vice versa). Il
est aussi assez intelligent pour permettre une forme
``relaxée'' lors des mises à jour et dans les clauses
WHERE
qui comparent une date et une colonne
TIMESTAMP
, DATE
, ou
DATETIME
. (Forme relaxée signifie que
n'importe quel caractère de ponctuation peut être utilisé en
tant que séparateurs des parties. Par exemple,
'1998-08-15'
et
'1998#08#15'
sont équivalents.) MySQL peut
convertir une chaîne ne contenant aucun séparateur (comme
'19980815'
), en supposant qu'elle a un sens
pour une date.
La date spéciale '0000-00-00'
peut être
stockée et récupérée en tant que
'0000-00-00'.
Lors de l'utilisation d'une
date '0000-00-00'
avec
MyODBC
, elle sera automatiquement convertie
en NULL
à partir de la version 2.50.12 de
MyODBC
, car ODBC ne peut gérer ce type de
dates.
Puisque MySQL effectue les conversions décrites plus haut, ce qui suit fonctionnera :
mysql>INSERT INTO nom_de_table (idate) VALUES (19970505);
mysql>INSERT INTO nom_de_table (idate) VALUES ('19970505');
mysql>INSERT INTO nom_de_table (idate) VALUES ('97-05-05');
mysql>INSERT INTO nom_de_table (idate) VALUES ('1997.05.05');
mysql>INSERT INTO nom_de_table (idate) VALUES ('1997 05 05');
mysql>INSERT INTO nom_de_table (idate) VALUES ('0000-00-00');
mysql>SELECT idate FROM nom_de_table WHERE idate >= '1997-05-05';
mysql>SELECT idate FROM nom_de_table WHERE idate >= 19970505;
mysql>SELECT MOD(idate,100) FROM nom_de_table WHERE idate >= 19970505;
mysql>SELECT idate FROM nom_de_table WHERE idate >= '19970505';
Toutefois, ce qui suit ne fonctionnera pas :
mysql> SELECT idate FROM nom_de_table WHERE STRCMP(idate,'19970505')=0;
STRCMP()
est une fonction de chaînes de
caractères, il convertit donc idate
en une
chaîne et effectue une comparaison de chaînes. Il ne convertit
pas '19970505'
en date et n'effectue donc pas
de comparaison de dates.
Notez que MySQL vérifie très peu l'intégrité des dates. Si
vous stockez une date erronée, comme
'1998-2-31'
, la date erronée sera
enregistrée.
Vu que MySQL compresse les dates pour les stocker, il ne peut stocker tout format donné car il risquerait de ne pas correspondre au tampon de résultat. Les règles d'acceptations de dates sont :
Si MySQL peut enregistrer et récupérer une date donnée,
la date erronée est acceptée pour les colonnes
DATE
et DATETIME
Toutes les valeurs de ours comprises entre 0 et 31 sont acceptées. Cela est fort convenable pour les applications web où vous demandez l'année, mois et jour dans trois champs textes (ou liste déroulantes) différents.
Le champ jour ou mois peut être un zéro. Cela est
convenable si vous voulez enregistrer un anniversaire dans
une colonne DATE
et que vous ne
connaissez qu'une partie de la date.
Si la date ne peut être convertie en une valeur raisonnable, un
0
est inséré dans le champ
DATE
, il sera récupéré en tant que
0000-00-00
. Cela est une solution rapide et
convenue vu que nous considérons que la responsabilité de la
base de données est de récupérer la même date que vous aviez
stocké (même si la date n'est pas correcte). Nous pensons que
c'est à l'application de vérifier les dates, et non au serveur
de le faire.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.