我有一列日期以YYYYMMDD格式记录,数据类型为nvarchar。我想将数据类型更改为datetime并更新exdatedocumented的列名,并使用ALTER更改表。任何人都可以帮忙。我已经尝试过类似
update dbo.table2
set [DateDocumented] = convert(datetime,CAST([DateDocumented] as datetime),130)
我最终遇到了错误
Msg 242, Level 16, State 3, Line 1
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated
。
答案 0 :(得分:1)
您应该能够只更改列类型:
alter dbo.table2 alter column DateDocumented datetime;
您的列采用适合转换的格式。如果要改用默认格式,请执行以下操作:
update table dbo.table2
set [DateDocumented] = convert(datetime, CAST([DateDocumented] as datetime));
这也应允许将列转换为datetime
。
答案 1 :(得分:0)
首先更改该列名,然后更改表
sp_RENAME 'dbo.table2.datedocumented', 'exdatedocumented' , 'COLUMN'
go
ALTER TABLE dbo.table2
ALTER COLUMN exdatedocumented datetime;
答案 2 :(得分:0)
看来我们这里发生了两件事。更改列的类型。并更改列的名称。让我们尝试将它们分开,以免混淆。我将处理类型的更改(从varchar更改为datetime):
首先:为什么选择日期时间?为什么要记下datetime2(需要多少秒,例如datetime2(0))?日期和时间的新类型已经有10年了!
无论如何,您的表中显然有无效的值!您需要做的第一件事是找到这些行并进行处理。假设您将更改为datetime2(0),如果没有,则只需在下面更改为datetime:
SELECT *
FROM dbo.Table2
WHERE TRY_CAST(DateDocumented AS datetime2(0)) IS NULL