我有一列具有VARCHAR数据类型的列,其日期(值)为字符串,如dd / mm / yyyy
我想将其数据类型更改为DATE,并希望在尝试执行操作时保留输入的日期(值),例如:
ALTER TABLE t1 MODIFY col1 DATE;
我丢失了字符串,值被转换为0000.00.00
如何在不丢失数据的情况下更改列数据类型。
答案 0 :(得分:1)
我会
ALTER TABLE t1 ADD temp_date DATE;
CAST('2000-01-01' AS DATE)
UPDATE t1 SET temp_date=CAST(yourvarcharcol AS DATE) WHERE 1;
ALTER TABLE t1 MODIFY yourvarcharcol DATE;
UPDATE t1 SET yourvarcharcol=temp_date WHERE 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”
使用这种方法,您可以在分解日期时检查是否存在问题。希望对您有帮助。请注意,只有在其他直接方法不起作用的情况下。