【发布时间】:2013-02-25 09:24:44
【问题描述】:
我试图以秒为单位提取两个 SQL DateTime 值之间的差异,并使用小数位进行某些性能监控。
我有一个表“Pagelog”,它有一个“创建”和“结束”日期时间。在过去,我能够做到以下几点:
SELECT DATEDIFF(ms, pagelog_created, pagelog_end)/1000.00 as pl_duration FROM pagelog
但是我开始收到以下错误:
Msg 535, Level 16, State 0, Line 1
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
我看到很多针对此错误的回复,指出我应该使用不太精确的测量单位。但是当我需要区分 2.1 秒和 2.9 秒时,这几乎没有帮助,因为 DATEDIFF(s,..,..) 将返回 INT 结果并失去我需要的准确性。
我最初认为这是由于我的表中的一些值具有很大的范围但运行此:
SELECT DATEDIFF(s, pagelog_created, pagelog_end) FROM pagelog
ORDER BY DATEDIFF(s, pagelog_created, pagelog_end) DESC
返回最大值 30837,即 8.5 小时或 30,837,000 毫秒,就我所知,在 SQL INT 的范围内?
任何帮助将不胜感激,据我所知,我有两个选择:
- 以某种方式解决数据问题,找到罪魁祸首
- 寻找不同的方法来计算值之间的差异
谢谢!
【问题讨论】:
-
试试:
CAST(DATEDIFF(ms, pagelog_created, pagelog_end) AS BIGINT)/1000.00 -
@Justin:溢出会在它进入演员表之前发生
-
@JLo - 必须有一个值导致它溢出。你能试试运行这个吗:
SELECT max(DATEDIFF(s, pagelog_created, pagelog_end)) FROM pagelog -
错误可能是由脚本的不同片段引起的吗?不同的脚本?
标签: sql-server sql-server-2008