Zo'n DATE "waarde" opslaan in een DATE
of DATETIME
kolom is mogelijk met behulp van de sql_mode ALLOW_INVALID_DATES
en geen strikte modus:
Dus het controleren van de datum voor een toegestane contable-datum kan worden gedaan met triggers, omdat er ook geen andere controle is. Ik neem aan dat voor deze aanvraag de 31e van elke maand een ongeldige datum zou zijn.
Voorbeeld:
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;
Resultaat:
cday cmonth cdiff
-------------------
30 2 28
MySQL Workbench gebruiken die ik krijg met
SELECT contable_date FROM example
volgend resultaat:
contable_date
-------------
2014-02-30
maar dit werkt niet op sqlfiddle.com.
Ik zou dit echter niet aanbevelen, vooral omdat men niet in staat is om de strikte SQL-modus te gebruiken. Men moet ook rekening houden met het effect op de datum- en tijdfuncties.