Salvando tal "valor" DATE em um
DATE
ou DATETIME
coluna é possível usando o sql_mode ALLOW_INVALID_DATES
e sem modo estrito:Portanto, verificar a data de uma data contável permitida pode ser feita com gatilhos, pois também não há outra verificação. Presumo que para esta aplicação o dia 31 de cada mês seria uma data inválida.
Exemplo:
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;
Resultado:
cday cmonth cdiff
-------------------
30 2 28
Demonstração
Usando o MySQL Workbench eu recebo com
SELECT contable_date FROM example
seguinte resultado:
contable_date
-------------
2014-02-30
mas isso não funciona em sqlfiddle.com.
Eu não recomendaria isso, especialmente porque não é possível usar o modo SQL estrito. Deve-se considerar o efeito nas funções de data e hora também.