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

时间:2016-09-21 13:23:46

标签: sql sql-server alter-table

在这上面看了几个线程,但我有一个特定的实例,我试图在ALTER TABLE语句中进行转换。

ALTER TABLE Leads
ALTER COLUMN [Created Date] Date

这是一个错误:

  

Msg 241,Level 16,State 1,Line 34
  从字符串转换日期和/或时间时转换失败   声明已经终止。

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

3 个答案:

答案 0 :(得分:8)

您可以标准化日期格式。像这样:

UPDATE Leads
    SET [Created Date] = TRY_CONVERT(Date, [Created Date], 101);

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

注意:如果这样做,请务必备份表格,这样就不会丢失列中的信息!

然后,您的代码应该有效:

ALTER TABLE Leads ALTER COLUMN [Created Date] Date;

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

select [Created Date]
from Leads
where try_convert(date, [Created Date], 101) is null and
      [Created Date] is not null;

答案 1 :(得分:2)

根据Jarlh:

ALTER TABLE Leads
ADD COLUMN CreatedDate Date;

UPDATE Leads
SET CreatedDate = cast(right([Created Date],4) + '-' + left([Created Date],2) + '-' + left(right([Created Date],7),2) as Date);

Alter TABLE Leads
DROP COLUMN [Created Date];

sp_rename 'Leads.CreatedDate', '[Created Date]', 'COLUMN';

答案 2 :(得分:0)

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