sql类型转换

时间:2018-09-06 06:45:13

标签: sql sql-server type-conversion

我有一列日期以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

3 个答案:

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