Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Salvando 30 de fevereiro no Mysql (formatação de data)


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.