ALTER TABLE table_name
ALTER COLUMN columnWithDate datetime;
columnWithDate是nvarchar(255)的一种,数据采用2018.06.19.
形式。我已经检查了所有不同的值,并且columnWithDate中有一行的NULL值。
我在alter命令中遇到以下错误:
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
我在这里想念什么?
答案 0 :(得分:5)
您需要首先将值更改为明确的格式,然后更改数据类型。对于您拥有的值,只需删除.
,因为它会产生ISO格式yyyyMMdd
:
UPDATE YourTable
SET YourDateColumn = REPLACE(YourDateColumn,'.','');
ALTER TABLE YourTable ALTER COLUMN YourDateColumn datetime; --Should this not be a date?
尽管我评论说,date
在这里可能是一个更好的选择,因为您的价值中没有时间部分。
答案 1 :(得分:2)
我怀疑日期之后的多余点(。)是罪魁祸首。在您的示例2018.06.19.
下面的这段代码给了我同样的错误
DECLARE @DATE NVARCHAR(255)= N'2018.06.19.'
SELECT CAST(@DATE AS datetime)
消息242,级别16,状态3,第3行nvarchar数据的转换 类型转换为日期时间数据类型会导致值超出范围。
因此,只需在Alter之前从nvarchar字段中删除点即可。
答案 2 :(得分:1)
该列中某处的值不正确。我建议找到它:
select columnWithDate
from table_name
where try_convert(datetime, columnWithDate) is null and
columnWithDate is not null;
如果您要删除不正确的日期,请先update
:
update table_name
set columnWithDate = try_convert(datetime, columnWithDate);
这会将值转换回字符串,但是该字符串在您的系统上应该可以转换回datetime
。