Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tiết kiệm 30 tháng 2 trên Mysql (Định dạng ngày)

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

Demo

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhiều tên máy chủ và nhiều đặc quyền?

  2. Mysql hiển thị tạo ràng buộc?

  3. LINQ to SQL nhiều bảng bên trái kết hợp bên ngoài

  4. Cập nhật MySQL sử dụng PDO và câu lệnh chuẩn bị không hoạt động

  5. Đường hầm SSH cho kết nối Python MySQLdb