【问题标题】:Change Datetime2 to Datetime in SSMS在 SSMS 中将 Datetime2 更改为 Datetime
【发布时间】:2014-09-18 03:34:09
【问题描述】:

我需要将一列的数据类型从 Datetime2(7) 更改为 Datetime,我有很多采用这种格式的记录,所以当我尝试更改数据类型时,我收到以下错误:

The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

如何更改数据,然后更改该列的数据类型?我需要为不兼容的应用程序切换到不太精确的数据类型的原因。此应用程序直接连接,因此无法在代码中进行转换。我在 SSMS 内部工作。

将一列固定为:

select *, cast(calldate as datetime)) * from records

但不适用于使用相同 Cast 的另一列 - 它给出了超出范围的错误。也许有些字段是空的——这会是个问题吗?如果是这样,我尝试了这个(同样的错误):

select *, cast(closedate as datetime) from records where closedate is not null

【问题讨论】:

  • 试试看这里。 stackoverflow.com/questions/11081571/…。编辑:简而言之,使用 Datepart 将 datetime2 拆分为多个部分,然后使用这些部分创建一个 Datetime
  • 我看到了,就是看不懂代码。
  • 我修复了一列,现在另一列出错了。
  • 猜测这篇文章更有可能是您超出范围错误的来源。 stackoverflow.com/questions/16197735/… datetime2 还支持比 datetime 更早的日期——不仅仅是更精确。 (即 1/1/0001)
  • @RThomas,也看到了,没有日期会超出范围,但它们可能为空。不过谢谢!

标签: sql sql-server-2008 ssms


【解决方案1】:
DECLARE @TestTime as DateTime2
 SET @TestTime = (SELECT CAST(GetDate() as datetime2))

 SELECT CAST(@TestTime AS datetime)

当我在第一组之后运行它时 @TestTime = "2014-09-24 15:39:02.7970000"。
结果是“2014-09-24 15:39:02.797”

【讨论】:

    猜你喜欢
    • 2016-11-30
    • 2012-06-20
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多