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
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.