Enregistrer une telle "valeur" DATE dans un DATE
ou DATETIME
colonne est possible en utilisant le sql_mode ALLOW_INVALID_DATES
et pas de mode strict :
Ainsi, la vérification de la date d'une date de contable autorisée peut être effectuée avec des déclencheurs, car il n'y a pas d'autre vérification non plus. Je suppose que pour cette application, le 31 de chaque mois serait une date invalide.
Exemple :
CREATE TABLE example (
contable_date DATE NOT NULL
) ENGINE=INNODB;
-- set the sql_mode (here for the session)
SET @@SESSION.sql_mode = 'ALLOW_INVALID_DATES';
INSERT INTO example (contable_date) VALUES ("2014-02-30");
SELECT
DAY(contable_date) as cday,
MONTH(contable_date) as cmonth,
TIMESTAMPDIFF(DAY, contable_date, '2014-03-30') as cdiff
FROM
example;
Résultat :
cday cmonth cdiff
-------------------
30 2 28
J'utilise MySQL Workbench avec
SELECT contable_date FROM example
résultat suivant :
contable_date
-------------
2014-02-30
mais cela ne fonctionne pas sur sqlfiddle.com.
Je ne le recommanderais cependant pas, surtout parce que l'on ne peut pas utiliser le mode SQL strict. Il faut également tenir compte de l'effet sur les fonctions de date et d'heure.