【问题标题】:sql type conversionsql类型转换
【发布时间】:2018-09-06 06:45:12
【问题描述】:

我有一个以 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

.

【问题讨论】:

  • 您使用的是哪个 dbms? (那里使用的产品特定功能......)
  • 我正在使用 sql server management studio 2014
  • 您将值转换为datetime 两次,这是第一次没有尝试控制它的解释方式。第二个,你把130 from拉到哪里了?

标签: sql sql-server type-conversion


【解决方案1】:

您应该可以只更改列类型:

alter dbo.table2 alter column DateDocumented datetime;

您的专栏采用适合转换的格式。如果您想改用默认格式,只需执行以下操作:

update table dbo.table2
    set [DateDocumented] = convert(datetime, CAST([DateDocumented] as datetime));

这也应该允许将列转换为datetime

【讨论】:

  • Msg 343,级别 15,状态 1,行 1 在 CREATE、DROP 或 ALTER 语句中使用的未知对象类型“dbo”。这是我尝试上述代码后得到的
  • Gordon 在 ALTER 工作后错过了 TABLE 这个词。所以命令应该是这样的: ALTER TABLE dbo.table2 ALTER COLUMN DateDocumented datetime;
  • @TiborKaraszi 。 . .谢谢。
【解决方案2】:

首先更改该列名,然后更改表

sp_RENAME 'dbo.table2.datedocumented', 'exdatedocumented' , 'COLUMN'
go
ALTER TABLE dbo.table2
ALTER COLUMN exdatedocumented datetime; 

【讨论】:

  • 将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。该语句已终止。这是我得到的错误
  • @cherry 您的现有列中的值现在是什么类型
  • datedocumented 列的数据类型是 nvarchar
  • datedocumented 列的数据类型是 nvarchar
  • @cherry CREATE table table2 (datedocumented NVARCHAR(500)); GO sp_RENAME 'dbo.table2.datedocumented', 'exdatedocumented' , 'COLUMN' go ALTER TABLE dbo.table2 ALTER COLUMN exdatedocumented datetime;
【解决方案3】:

看来我们这里发生了两件事。更改列的类型。并更改列的名称。让我们尝试将它们分开,以免混淆。我将解决类型的变化(从 varchar 到 datetime):

首先:为什么是日期时间?为什么要记下 datetime2(你想要的任何几分之一秒,例如 datetime2(0))?日期和时间的新类型已经存在 10 年了!

无论如何,您的表中显然有无效日期的值!您需要做的第一件事是找到这些行并处理它们。假设您将更改为 datetime2(0),如果没有,则只需在下面更改为 datetime:

SELECT * 
FROM dbo.Table2
WHERE TRY_CAST(DateDocumented AS datetime2(0)) IS NULL

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多