【问题标题】:Adding a value to a datetime column caused an overflow向日期时间列添加值导致溢出
【发布时间】:2013-04-26 20:13:32
【问题描述】:

收到此错误:

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

CASE U.BasePool 
            WHEN 0 THEN 'N/A'
            WHEN -1 THEN 'N/A'
            ELSE CASE 
                    WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) > U.BasePool THEN 'IN-OVERAGE'
                    --WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) + (SUM(SUM(B.TransactionCount))  OVER (Partition by U.ContractID)/MonthNum) > U.BasePool THEN DATEADD(MM, 1, GETDATE())
                    ELSE  CASE WHEN MonthNum<1 THEN NULL ELSE CONVERT(VARCHAR(20),DATEADD(MM,CAST(ROUND((U.BasePool - SUM(SUM(B.TransactionCount))  OVER (Partition by U.ContractID)) 
                                /(SUM(SUM(B.TransactionCount))  OVER (Partition by U.ContractID)/MonthNum),0) as Int), GETDATE()),101)

                    --(basepool - sumcontract) / (sumcontract/monthNum ) is the expected months to reach overage
                END 
            END
            END AS  ExpectedDate

【问题讨论】:

  • 能否请教一下使用什么表结构?

标签: sql sql-server


【解决方案1】:

最大datetime 值为'9999-12-31',因此您可以将大约95840 个月添加到getdate() 这会准确地产生您的错误:

select dateadd(month,95841, getdate() )

你一定是在计算要添加的月数时犯了错误。

【讨论】:

  • 是的,我试过了。你是对的。你能建议或帮助我吗?我已经编辑了查询。
  • 我不知道你的数据结构,你也没有解释你在做什么,确切地说......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2012-03-13
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多