SQL Server - 在ALTER TABLE中将VarChar转换为Date

han*_*olo 2 sql sql-server alter-table

看到一些线程,但我有一个特定的实例,我试图在ALTER TABLE语句中进行转换.

ALTER TABLE Leads
ALTER COLUMN [Created Date] Date
Run Code Online (Sandbox Code Playgroud)

这是一个错误:

消息241,级别16,状态1,行34
转换从字符串转换日期和/或时间时失败.
该语句已终止.

创建日期当前设置为(varchar(max),null)

Gor*_*off 8

您可以标准化日期格式.像这样的东西:

UPDATE Leads
    SET [Created Date] = TRY_CONVERT(Date, [Created Date], 101);
Run Code Online (Sandbox Code Playgroud)

第三个参数是注释中提到的MM/DD/YYYY格式.这会将值转换为日期 - 如果可以 - 以及NULL其他方式.然后,SQL Server将使用其默认格式转换回字符串.

注意:如果这样做,请确保备份表,以免丢失列中的信息!

然后,您的代码应该工作:

ALTER TABLE Leads ALTER COLUMN [Created Date] Date;
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法找到恶意值:

select [Created Date]
from Leads
where try_convert(date, [Created Date], 101) is null and
      [Created Date] is not null;
Run Code Online (Sandbox Code Playgroud)


小智 0

我认为你必须创建临时表,然后将所有记录插入临时表,然后重命名临时表和原始表