表中的日期格式为YYYYMMDD,我想将其转换为以下格式,但由于错误而失败:
2019-07-23 00:00:00.000
从字符串转换日期和/或时间时转换失败
这是我正在使用的语句:
convert(varchar(10), convert(datetime, InstallDate0), 23)
答案 0 :(得分:4)
真正的问题是数据类型的选择。 varchar
是错误的选择。结果,似乎您现在有些行中的“日期”值丢失了,因为它不能转换为日期。
要正确解决此问题,请修复数据类型。首先,我将创建一个新列来存储错误值:
ALTER TABLE YourTable ADD BadDate varchar(20); --as it's yyyyMMdd you don't need more than 8 characters, but we'll assume you have some really bad values
UPDATE YourTable
SET BadDate = InstallDate0
WHERE TRY_CONVERT(datetime,InstallDate0) IS NULL;
现在您已经完成了,现在该更新现有列:
UPDATE YourTable
SET InstallDate0 = CONVERT(varchar(8),TRY_CONVERT(datetime, InstallDate),112);
这会将每个值设置为yyyyMMdd
格式,可以在其中转换该值。现在,您可以更改表格了:
ALTER TABLE YourTable ALTER COLUMN InstallDate0 date; --AS it's yyyyMMdd, it seems silly to actually use datetime
现在您有一个适当的datetime
列。
然后,您需要检查BadDate
和 try 的值以更正它们(或承认它们拥有的任何信息都永远丢失了)。
如果“必须”使用格式添加另一列,则添加另一列:
ALTER TABLE YourTable ADD InstallDate0_f AS CONVERT(varchar(23),InstallDate0,121);