2017-12-18 160 views
1

我有date列,它的類型是varchar(40) 我想將它轉換爲datetime轉換爲varchar(40)datetime列

請讓我知道,如果下面的命令是正確轉換爲datetime

UPDATE `table` 
SET `date` = str_to_date(`date`, '%d-%m-%Y'); 

該表有成千上萬的記錄。例如,date具有價值10/21/2016 15:02一條記錄

回答

1

兩件事情:

首先,你STR_TO_DATE()格式必須輸入字符串的格式相匹配。如果你的輸入字符串是10/21/2016 15:02,那麼你的格式是%m/%d/%Y %H:%i

見這裏的格式代碼的參考:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

其次,使用更新不會更改列的數據類型,它只是改變了VARCHAR字符串的內容。

mysql> create table t (v varchar(50)); 

mysql> insert into t values ('10/21/2016 15:02'); 

mysql> update t set v = str_to_date(v, '%m/%d/%Y %H:%i'); 

mysql> select * from t; 
+---------------------+ 
| v     | 
+---------------------+ 
| 2016-10-21 15:02:00 | 
+---------------------+ 

現在它的格式正確,但它仍然是一個varchar。

mysql> alter table t modify v datetime; 

mysql> select * from t; 
+---------------------+ 
| v     | 
+---------------------+ 
| 2016-10-21 15:02:00 | 
+---------------------+ 

現在數據類型已更改。

mysql> show create table t\G 

CREATE TABLE `t` (
    `v` datetime DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4