Menyimpan "nilai" DATE dalam DATE
atau DATETIME
kolom dimungkinkan menggunakan sql_mode ALLOW_INVALID_DATES
dan tidak ada mode ketat:
Jadi memeriksa tanggal untuk tanggal contable yang diizinkan dapat dilakukan dengan pemicu, karena tidak ada pemeriksaan lain juga. Saya berasumsi bahwa untuk aplikasi ini tanggal 31 setiap bulan akan menjadi tanggal yang tidak valid.
Contoh:
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;
Hasil:
cday cmonth cdiff
-------------------
30 2 28
Menggunakan MySQL Workbench yang saya dapatkan dengan
SELECT contable_date FROM example
hasil berikut:
contable_date
-------------
2014-02-30
tetapi ini tidak berfungsi di sqlfiddle.com.
Saya tidak akan merekomendasikan ini, terutama karena seseorang tidak dapat menggunakan mode SQL yang ketat. Seseorang harus mempertimbangkan efeknya pada fungsi tanggal dan waktu juga.