在MySQL中将列数据类型从VARCHAR转换为DATE?

时间:2019-03-27 05:16:03

标签: mysql

我有一列具有VARCHAR数据类型的列,其日期(值)为字符串,如dd / mm / yyyy

我想将其数据类型更改为DATE,并希望在尝试执行操作时保留输入的日期(值),例如:

ALTER TABLE t1 MODIFY col1 DATE;

我丢失了字符串,值被转换为0000.00.00

如何在不丢失数据的情况下更改列数据类型。

2 个答案:

答案 0 :(得分:1)

我会

  1. 添加时间列
ALTER TABLE t1 ADD temp_date DATE;
  1. 更新此时间列以强制转换值CAST('2000-01-01' AS DATE)
UPDATE t1 SET temp_date=CAST(yourvarcharcol AS DATE) WHERE 1;
  1. 更新原始列类型
ALTER TABLE t1 MODIFY yourvarcharcol DATE;
  1. 用时间列更新原始列。
UPDATE t1 SET yourvarcharcol=temp_date WHERE 1;
  1. 删除时间列
ALTER TABLE t1 DROP COLUMN temp_date

答案 1 :(得分:1)

当我遇到这个问题时,我用两个临时列解决了这个问题,以免丢失主要值,这与Erubiel的答案非常相似。

表T1;原始列“ myvarchar”

1.-插入新列

ALTER TABLE T1 ADD Temp_ColDate1 VARCHAR;
ALTER TABLE T1 ADD Temp_ColDate2 DATE;

2 .--在添加的第一列中,切割和布防值根据DATE格式放置,但在VARCHAT列中

UPDATE  T1  SET Temp_ColDate1 = (SELECT CONCAT((SELECT RIGHT(myvarchar, 4)),(SELECT MID(myvarchar, 4, 2)),(SELECT LEFT(myvarchar, 2))))  WHERE 1=1;

3.-然后在临时列2中将值从VARCHAR转换为DATE

UPDATE  T1  SET Temp_ColDate2 = (SELECT CONVERT(Temp_ColDate1, DATE))  WHERE 1=1;

4.-删除临时列1

ALTER TABLE T1 DROP COLUMN Temp_ColDate1;

5.-请记住,Temp_ColDate1中的格式将来自0000-00-00(YYYY-mm-dd),当您需要一个值时,只需更改演示文稿的格式即可。

6.-您可以删除“ myvarchar”并将“ Temp_ColDate2”重命名为“ myvarchar”

使用这种方法,您可以在分解日期时检查是否存在问题。希望对您有帮助。请注意,只有在其他直接方法不起作用的情况下。