有没有办法使像"1980-1-12"这样的日期成为 MySQL 中 DATE 类型的有效值?



我正试图将不同的日期插入到下面的表中。表

CREATE TABLE companies
(
id INT AUTO_INCREMENT,
name VARCHAR(45) NOT NULL,
rate INT,
created_on DATE NOT NULL,
CHECK(rate >= 0 AND rate <= 10),
PRIMARY KEY(id)
);

有百分之一的不同值,其中许多值对YYYY-MM-DD格式是正确的,并且毫不费力地通过。但也有一些日期的格式是YYYY-M-D或类似的格式。是否有可能使变量接受并正确读取这两种格式?一些值

INSERT INTO companies(id, name, rate, created_on) VALUES 
(1, 'Gaylord', 6, '2005-7-19'),
(2, 'Feil Group', 9, '2018-1-26'),
(3, 'Halvorson LLC', 3, '1988-1-24'),
(4, 'Grant-Howell', 9, '1995-6-14'),
(5, 'Gislason', 2, '2007-6-20'),
(6, 'Harvey', 5, '2000-10-20'),
(7, 'Kutch Ltd', 6, '2008-9-15'),
(8, 'Harvey', 9, '2003-6-6'),
(9, 'Wolff Inc', 5, '1989-4-8'),
(10, 'Hackett PLC', 1, '1996-6-20'),
(11, 'Schmeler', 3, '2010-7-26'),
(12, 'Trantow-Breitenberg', 2, '1989-3-0')
);

错误信息如下:

Error Code: 1292. Incorrect date value: '1989-3-0' for column 'created_on' at row 12

所有版本的mysql(至少回到5.5和可能更早的版本)将默默地接受并正确解析个位数的月份或年份,没有错误,即使启用了STRICT_TRANS_TABLES。当你插入时,你不需要做任何特别的事情。

如果您希望看到个位数的月份和年份,请在选择时使用DATE_FORMAT(created_on,'%Y-%c-%e')。如果您发现自己经常这样做,您可以添加一个生成的列:

alter table companies
add formatted_created_on varchar(10) as (date_format(created_on,'%Y-%c-%e'))

并选择formatted_created_on。

最新更新