Lưu một "giá trị" DATE như vậy trong một DATE
hoặc DATETIME
có thể sử dụng cột sql_mode ALLOW_INVALID_DATES
và không có chế độ nghiêm ngặt:
Vì vậy, việc kiểm tra ngày cho ngày có thể ký được cho phép có thể được thực hiện bằng các trình kích hoạt, vì không có cách kiểm tra nào khác. Tôi cho rằng đối với ứng dụng này, ngày 31 hàng tháng sẽ là ngày không hợp lệ.
Ví dụ:
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;
Kết quả:
cday cmonth cdiff
-------------------
30 2 28
Sử dụng MySQL Workbench mà tôi nhận được
SELECT contable_date FROM example
kết quả sau:
contable_date
-------------
2014-02-30
nhưng điều này không hoạt động tại sqlfiddle.com.
Mặc dù vậy, tôi sẽ không khuyến nghị điều này, đặc biệt là vì một người không thể sử dụng chế độ SQL nghiêm ngặt. Người ta cũng nên xem xét ảnh hưởng đến các chức năng ngày và giờ.