本文共 1141 字,大约阅读时间需要 3 分钟。
最近遇到一个 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:332020-02-26 12:11:002020-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();
特此记录,待解决。。。
转载地址:http://imrai.baihongyu.com/