【问题标题】:Adding a value to a 'datetime2' column caused an overflow向“datetime2”列添加值导致溢出
【发布时间】:2015-07-22 14:45:21
【问题描述】:

我知道为什么我会看到这个错误,这是因为我的一些 locationDeletionDate 是 '9999-12-31 00:00:00.0000000',并将 90 天添加到 locationDeletionDate(就像我在我的查询)导致标题中的错误:

...WHERE                
(bpj.JobStatus = 'Live') 
AND (l.locationEffectiveDate <= SYSDATETIME()) 
AND (dateadd(d,90,l.locationDeletionDate) >= SYSDATETIME())...

我想我需要的是 CASE 在我的WHERE-子句中的条件CASE,以确保添加 90 天后日期不会出错?还是有更优雅的方式?

【问题讨论】:

  • 为什么不在 where 子句中再添加一个谓词呢? AND l.locationDeletionDate
  • 我会同意@sean 为什么要存储 9999 日期?

标签: sql sql-server dateadd


【解决方案1】:

您可以使用这种方法来解决您的问题

...WHERE                
(bpj.JobStatus = 'Live') 
AND (l.locationEffectiveDate <= SYSDATETIME()) 
AND (l.locationDeletionDate >= dateadd(d, -90, SYSDATETIME())...

在这种情况下,您还解决了性能问题。您的谓词变为 SARGable。

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多