Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern des 30. Februar auf Mysql (Datumsformatierung)

Speichern eines solchen DATE-"Wertes" in einem DATE oder DATETIME Spalte ist mit dem sql_mode ALLOW_INVALID_DATES möglich und kein strikter Modus:

Das Überprüfen des Datums auf ein zulässiges Contable-Datum könnte also mit Triggern erfolgen, da es auch keine andere Überprüfung gibt. Ich gehe davon aus, dass für diese Anwendung der 31. eines jeden Monats ein ungültiges Datum wäre.

Beispiel:

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;

Ergebnis:

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

Demo

Mit MySQL Workbench bekomme ich mit

SELECT contable_date FROM example

folgendes Ergebnis:

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

aber das funktioniert nicht bei sqlfiddle.com.

Ich würde dies jedoch nicht empfehlen, insbesondere weil man den strikten SQL-Modus nicht verwenden kann. Man sollte auch die Auswirkungen auf die Datums- und Zeitfunktionen berücksichtigen.