在这上面看了几个线程,但我有一个特定的实例,我试图在ALTER TABLE语句中进行转换。
ALTER TABLE Leads
ALTER COLUMN [Created Date] Date
这是一个错误:
Msg 241,Level 16,State 1,Line 34
从字符串转换日期和/或时间时转换失败 声明已经终止。
创建日期当前设置为(varchar(max),null)
答案 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)
我认为你必须创建临时表 然后将所有记录插入到临时表中 重命名临时表和原始表