【问题标题】:datetime2 overflow errordatetime2 溢出错误
【发布时间】:2016-04-08 19:31:37
【问题描述】:

我正在尝试使用以下语法和 (dateadd(yy,13,isNull(cast(p.birthDTS as datetime),cast('1/1/1950'作为日期时间)))>=@svcStart)

我得到 向“日期时间”列添加值导致溢出。

我搜索了 max(p.birthDTS),它返回 1988-10-17 00:00:00.0000000

我得到 @svcStart 为 2015-04-08 13:10:49.193

我有点困惑。有什么帮助吗?

jb

【问题讨论】:

  • birthDTSMIN 值是多少?

标签: sql datetime2


【解决方案1】:

如果您正在使用 DATETIME2 的值,您可能想尝试将值转换为 DATETIME2 而不是 DATETIME

DATEADD(yy,13,ISNULL(CAST(p.birthDTS AS DATETIME2),CAST('1/1/1950' AS DATETIME2)))

假设您没有任何无效数据或类似问题,并且您提供的示例数据是正确的(即最大的是1988-10-17),这似乎是正确的seen here

我会确保您仔细检查所有数据类型以确保它们按预期定义,并考虑再次查询您的数据以检查任何边缘情况(例如,最大值和最小值、可能的空值等) .

【讨论】:

    【解决方案2】:

    如果您在日期字段中的记录中的值不是有效日期,或者您在该值中添加了一些月份或日期并且其输出将超出日期范围,您可能会遇到此错误。

    【讨论】:

    • 你是对的。表中的最大生日显然是 9999-01-01 00:00:00.0000000 的错误,但我需要检查它以排除错误。非常感谢您的评论。
    • @user1795131 所以当你说,“我搜索了 max(p.birthDTS) 并返回 1988-10-17 00:00:00.0000000”..?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多