Mysql 函数 STR_TO_DATE

最近遇到一个 STR_TO_DATE 的问题,一直没有找到原因:
使用 STR_TO_DATE 函数作为查询条件,可以查询出数据
使用 STR_TO_DATE 函数作为删除的过滤条件,却报错了

STR_TO_DATE 的简单使用示例

SELECT 
    STR_TO_DATE('2020-02-26 12:11:33','%Y-%m-%d %H:%i:%s'),
    STR_TO_DATE('2020-02-26 12:11:33','%Y-%m-%d %H:%i'),
    STR_TO_DATE('2020-02-26', '%Y-%m-%d')
FROM DUAL;

输出结果

2020-02-26 12:11:33
2020-02-26 12:11:00
2020-02-26

问题还原

删除日期小于今天的数据,因保存日期的字段类型是字符串,故先转换为日期,再去删除数据。

1.建表

CREATE TABLE `tmp_string_date` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `save_day` varchar(50) DEFAULT NULL COMMENT '保存的时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.插入一条数据

INSERT INTO `tmp_string_date` (`id`,`save_day`) VALUES (1,'2020-02-26 12:11:33');

表数据
3.删除这条数据

delete from tmp_string_date where STR_TO_DATE(save_day,'%Y-%m-%d %H:%i') < now();

删除居然报错了,日期格式化为 ‘%Y-%m-%d %H:%i’ ,没有精确到秒居然报错了,错误信息为:

Error Code: 1292. Truncated incorrect datetime value: '2020-02-26 12:11:33'	0.000 sec

4.换一种格式化方式,精确到秒,可以删除成功

delete from tmp_string_date where STR_TO_DATE(save_day,'%Y-%m-%d %H:%i:%s') < now();

5.不精确到秒,改为查询语句却可以执行成功

select * from tmp_string_date where STR_TO_DATE(save_day,'%Y-%m-%d %H:%i') < now();

特此记录,待解决。。。

你可能感兴趣的:(MyBatis)