我有将week_date
存储为nvarchar(60)
的表。当我尝试将其更改为date
时,我得到以下错误。
表中的记录采用yyyy-mm-dd
格式
WEEK_DATE
----------
2017-12-31
2018-01-01
Msg 241,级别 16,状态 1,第 1
行 从字符串转换日期和/或时间时转换失败。
我已经使用了下面的方法进行转换,但这引发了一个错误
SET WEEK_DATE = CONVERT(NVARCHAR(260), WEEK_DATE, 120)
谢谢
使用 try_convert()
查找错误值:
select datecol
from t
where try_convert(date, datecol) is null and datecol is not null;
可以在代码中使用try_convert()
,但应调查数据问题。
编辑:
要将列更改为日期,请先验证格式(这样您就不会在转换时收到错误(:
update t
set week_date = try_convert(date, week_date);
不用担心格式。 它将使用任何本地化设置。 但令人高兴的是,生成的字符串将自动转换回日期。
然后,更改表:
alter table t
alter week_date date;
您可能希望使用第一个查询来检查是否实际识别了所有日期字符串。