转换日期格式给出“从字符串转换日期和/或时间时转换失败”

时间:2019-09-04 19:38:31

标签: sql sql-server

表中的日期格式为YYYYMMDD,我想将其转换为以下格式,但由于错误而失败:

2019-07-23 00:00:00.000

  

从字符串转换日期和/或时间时转换失败

这是我正在使用的语句:

convert(varchar(10), convert(datetime, InstallDate0), 23)

1 个答案:

答案 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);