将nvarchar列类型更改为datetime

时间:2019-06-26 14:04:55

标签: sql sql-server

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.

我在这里想念什么?

3 个答案:

答案 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