当我遇到这个问题时,我用两个临时列来解决它,以免丢失主要值,这与 Erubiel 的答案非常相似。
表 T1;原始列“myvarchar”
1.- 插入新列
ALTER TABLE T1 ADD Temp_ColDate1 VARCHAR;
ALTER TABLE T1 ADD Temp_ColDate2 DATE;
2.- 在添加的第一列中,根据 DATE 形式放置剪切和武装值,但在 VARCHART 列中
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”
使用此方法,您可以检查分解它们时的任何日期是否有问题。我希望它对你有帮助。请注意,这仅适用于其他直接方法不起作用的情况。