【发布时间】:2014-11-04 07:56:56
【问题描述】:
我有以下疑问:
select CONVERT(varchar(12), DATEADD(MILLISECOND, DateDiff(MILLISECOND, '2014-08-04 10:37:28.713','2014-11-04 08:21:17.723'), 0), 114)
当我执行这个时,我得到了错误: “datediff 函数导致溢出。分隔两个日期/时间实例的 datepart 数量太大。请尝试使用 datediff 和不太精确的 datepart。”
当我将查询更改为以下内容时,它可以正常工作:
select CONVERT(varchar(12), DATEADD(SECOND, DateDiff(SECOND, '2014-08-04 10:37:28.713','2014-11-04 08:21:17.723'), 0), 114)
问题是我真的也需要 MILLISECONDS。
【问题讨论】:
-
DATEDIFF 返回一个整数,它根本不足以容纳结果。我能想到的唯一方法是计算两个日期之间有多少天,然后仅对两个日期的时间部分进行比较,以计算出相差多少毫秒,然后将两者相加(将天数乘以一天中的毫秒数)。
-
旁注:您是否在实行某种夏令时的地区工作?因为在很多地方,在您正在查看的期间,DST 的开/关之间存在转换,SQL Server 不会考虑它。因此,您最终可能会得到一个“精确”到毫秒但相差一小时的结果。
-
@Damien_The_Unbeliever 这就是为什么您应该在数据库记录级别规范化日期信息,并在呈现时适当地转换为用户的区域设置。
标签: sql-server sql-server-2012 date-difference