【发布时间】:2017-03-06 19:05:42
【问题描述】:
我正在努力解决我团队内部出现的一个问题。计算日期之间的秒数的简单查询,稍后在计算中使用。
我们遇到的问题/错误是:“datediff 函数导致溢出。分隔两个日期/时间实例的 datepart 数量太大。尝试使用 datediff 和不太精确的 datepart。”
此图像显示查询及其用于计算的记录。它起作用的唯一原因是底部的行明确定义了时间范围。
当我删除时间并只保留日期时,我们会收到溢出错误。
workingStart 的数据类型为datetime,所以我唯一能想到的是将日期与日期时间字符串进行比较会导致溢出?
错误:
有人对为什么会发生此错误有官方答案吗?我唯一的猜测是数据类型比较。
【问题讨论】:
-
您确定
workingend对每条记录都有价值吗?也许您有一个带有0值的值,当您进行仅日期过滤时会显示该值。 -
@MarcB 添加了另一个不包括workingEnd计算的数据截图
-
datediff 为其结果返回一个带符号的 32 位 int,这意味着秒的总允许范围为 68 年。您应该运行一个单独的查询,看看是否有任何记录在日期之间存在 >=34 年的差异,而不使用 datediff。
-
是的,肯定看起来很可能是一个不可靠的日期——只要有人输入 2106 而不是 2016。检查基于日期的日期差异以查找大的差异,或者只查看您正在约会的日期的最小值和最大值,看看是否有任何可疑之处。
-
那么 datediff 是否会查看所有记录而不考虑 where 子句并对可能不在我的最终结果集中的数据进行计算?
标签: sql-server tsql datetime stored-procedures sql-server-2012