sql >> Base de Datos >  >> RDS >> Mysql

Guardar el 30 de febrero en Mysql (formato de fecha)

Guardar tal "valor" de FECHA en un DATE o DATETIME la columna es posible usando sql_mode ALLOW_INVALID_DATES y sin modo estricto:

Por lo tanto, la verificación de la fecha para una fecha contable permitida se puede hacer con disparadores, ya que no hay otra verificación también. Supongo que para esta aplicación el 31 de cada mes sería una fecha no válida.

Ejemplo:

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

Demostración

Usando MySQL Workbench obtengo con

SELECT contable_date FROM example

siguiente resultado:

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

pero esto no funciona en sqlfiddle.com.

Sin embargo, no recomendaría esto, especialmente porque uno no puede usar el modo SQL estricto. También se debe considerar el efecto en las funciones de fecha y hora.