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