我正試圖修復具有不正確日期時間格式的值。 問題是,下面的SELECT查詢是有效的,但UPDATE查詢會失敗。
選擇作業
SELECT STR_TO_DATE(created_at, '%d.%m.%Y %H:%i'/span>) 。
STR_TO_DATE(uped_at, '%d.%m.%Y %H:%i')
FROM用戶
WHERE DATE(created_at) IS NULL
and DATE(uped_at) IS NULL。
更新失敗
UPDATE users
SET created_at = STR_TO_DATE(created_at, '%d.%m.%Y %H:%i')。
updated_at = STR_TO_DATE(uped_at, '%d.%m.%Y %H:%i')
WHERE DATE(created_at) IS NULL
and DATE(uped_at) IS NULL。
出現如下錯誤
ERROR 1292(22007)。不正確的日期時間值。'12.05.2013 4:10'。
表格描述
------------ ----------------- ------ ----- --------- ----------------
| 欄位 | 型別 | Null | Key | Default | Extra |
------------ ----------------- ------ ----- --------- ----------------
| id | bigint unsigned | NO | operator">| PRI | NULL | auto_increment |
| username | varchar(30) | NO | | NULL | |
| created_at | varchar(20) | YES | | NULL | |
| updated_at | varchar(20) | YES | | NULL | |
------------ ----------------- ------ ----- --------- ----------------
Mysql版本為8.0.26
。P.S.
我能夠使用where子句中的regex來解決這個問題,但它看起來并不好
Thanks
謝謝你
uj5u.com熱心網友回復:
你不能以每一種格式保存日期時間。你應該保持支持的格式,在選擇中你可以根據需要改變格式。
DATETIME型別用于同時包含日期和時間的值。 部分。MySQL以 "YYYY-MM-DD "檢索和顯示DATETIME值。 hh:mm:ss'格式的DATETIME值。支持的范圍是'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' . TIMESTAMP資料型別用于包含日期和時間部分的值。
TIMESTAMP資料型別用于同時包含日期和時間部分的值。
試一下這個更新:
UPDATE用戶
SET created_at = STR_TO_DATE(created_at, '%Y-%m-%d %H:%i:%s')。
updated_at = STR_TO_DATE(uped_at, '%Y-%m-%d %H:%i:%s')
WHERE DATE(created_at) IS NULL
and DATE(uped_at) IS NULL。
uj5u.com熱心網友回復:
如果created_at和update_at的資料型別是varchar(如問題中提到的),你的查詢不應該對12.05.2013 4:10產生任何錯誤。請查看下面的例子:
create table users ( id bigint unsigned , username varchar(30), created_at varchar(20) 。updated_at varchar(20) )。
insert into users values(1, 'A',STR_TO_DATE('12. 05.2013 4:10', '%d.%m.%Y %H:%i'),STR_TO_DATE('12.05.2013 4:10', '%d.%m.%Y %H:%i')
選擇詢問:
select * from users
輸出:
| id | 用戶名 | >。created_at | updated_at||
|---|---|---|---|---|
| 1 | A | 2013-05-12 04:10:00 | 2013-05-12 04:10:00 | 2013-05-12 04:10:00 |
更新查詢:
UPDATE users
SET created_at = STR_TO_DATE('12.05.2013 4:10', '%d.%m.%Y %H:%i')。
updated_at = STR_TO_DATE(uped_at, '%d.%m.%Y %H:%i')
WHERE DATE(created_at) IS NULL
and DATE(uped_at) IS NULL。
選擇查詢:
select * from users
輸出:
| id | 用戶名 | >。created_at | updated_at||
|---|---|---|---|---|
| 1 | A | 2013-05-12 04:10:00 | 2013-05-12 04:10:00 | 2013-05-12 04:10:00 |
db<>fiddle here
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/328881.html
標籤:
