Mysql
 sql >> Database >  >> RDS >> Mysql

Salvataggio di 30 febbraio su MySQL (formattazione data)

Salvataggio di un tale "valore" DATE in un DATE o DATETIME è possibile utilizzare la colonna sql_mode ALLOW_INVALID_DATES e nessuna modalità rigorosa:

Quindi il controllo della data per una data contable consentita potrebbe essere eseguito con i trigger, poiché non ci sono anche altri controlli. Presumo che per questa domanda il 31 di ogni mese sia una data non valida.

Esempio:

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;

Risultato:

cday  cmonth  cdiff
-------------------
  30       2     28

Demo

Utilizzando MySQL Workbench ho con

SELECT contable_date FROM example

seguente risultato:

contable_date
-------------
   2014-02-30

ma questo non funziona su sqlfiddle.com.

Non lo consiglierei però, soprattutto perché non è possibile utilizzare la modalità SQL rigorosa. Si dovrebbe considerare anche l'effetto sulle funzioni di data e ora.