将nvarchar列类型更改为datetime

Mat*_*Som 0 sql sql-server

ALTER TABLE table_name
ALTER COLUMN columnWithDate datetime;
Run Code Online (Sandbox Code Playgroud)

columnWithDate是nvarchar(255)的一种,数据采用2018.06.19.形式。我检查了所有不同的值,并且columnWithDate中有一行具有NULL值。

我在alter命令中遇到以下错误runninf:

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?

Lar*_*rnu 5

您需要首先将值更改为明确的格式,然后更改数据类型。对于您拥有的值,只需删除.,即可产生ISO格式yyyyMMdd

UPDATE YourTable
SET YourDateColumn = REPLACE(YourDateColumn,'.','');

ALTER TABLE YourTable ALTER COLUMN YourDateColumn datetime; --Should this not be a date?
Run Code Online (Sandbox Code Playgroud)

正如我所评论的那样,date这里可能是一个更好的选择,因为您的价值没有时间部分。

  • 公平地说,我假设OP仅具有一个日期,而@JohnCappelletti的时间中没有一个小时部分(因此,添加了有关使用`date`而不是`datetime`的注释)。当然,我只有1个样本可以作为假设的基础。:/ (4认同)