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();

特此記錄,待解決。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章