Mysql
 sql >> Base de données >  >> RDS >> Mysql

Enregistrement du 30 février sur Mysql (formatage de la date)

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

Démo

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.