Записване на такава "стойност" на DATE в DATE
или DATETIME
колоната е възможна с помощта на sql_mode ALLOW_INVALID_DATES
и без строг режим:
Така че проверката на датата за разрешена контабилна дата може да се извърши с тригери, тъй като няма и друга проверка. Предполагам, че за това приложение 31-во число на всеки месец ще бъде невалидна дата.
Пример:
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;
Резултат:
cday cmonth cdiff
-------------------
30 2 28
Използвайки MySQL Workbench, който получавам с
SELECT contable_date FROM example
следния резултат:
contable_date
-------------
2014-02-30
но това не работи в sqlfiddle.com.
Не бих препоръчал това обаче, особено защото човек не може да използва строг SQL режим. Трябва да се вземе предвид и ефектът върху функциите за дата и час.