SQL Server - 在ALTER TABLE中将VarChar转换为日期
问题描述:
在此上看到一些线程,但我有一个特定的实例,我试图在ALTER TABLE语句内执行转换。SQL Server - 在ALTER TABLE中将VarChar转换为日期
ALTER TABLE Leads
ALTER COLUMN [Created Date] Date
这是抛出一个错误:
Msg 241, Level 16, State 1, Line 34
Conversion failed when converting date and/or time from character string.
The statement has been terminated.
创建日期目前定为(varchar(max),NULL)
答
您可以标准化日期格式。类似这样的:
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;
答
按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';
什么做的值样子在那一栏。 – scsimon
MM/DD/YYYY即10/24/2016 – hansolo
该列是否包含任何作为值或任何其他字符串字符的空格? –