带分钟的DATEDIFF不会返回预期值
说,我有以下带有数据的SQL Server 2008表:
CREATE TABLE tbl (dtIn DATETIME2, dtOut DATETIME2) INSERT tbl VALUES ('9/10/2012 5:14:10 AM', '9/10/2012 5:15:09 AM'), ('9/10/2012 5:16:12 AM', '9/10/2012 5:18:12 AM'), ('9/10/2012 5:18:43 AM', '9/10/2012 5:23:04 AM'), ('9/10/2012 5:25:17 AM', '9/10/2012 5:26:05 AM'), ('9/10/2012 5:26:57 AM', '9/10/2012 5:29:19 AM'), ('9/10/2012 5:31:41 AM', '9/10/2012 5:32:41 AM'), ('9/10/2012 5:33:16 AM', '9/10/2012 5:34:08 AM'), ('9/10/2012 5:35:25 AM', '9/10/2012 5:49:46 AM'), ('9/10/2012 5:55:35 AM', '9/10/2012 5:56:48 AM'), ('9/10/2012 5:58:54 AM', '9/10/2012 5:59:59 AM')
然后我运行了这个查询 :
WITH ctx AS( SELECT datediff(minute, dtIn, dtOut) AS d FROM tbl ) SELECT SUM(d) FROM ctx
我得到30分钟。
但是当我用C#尝试相同的时候:
double fM = 0; fM += (DateTime.Parse("9/10/2012 5:15:09 AM") - DateTime.Parse("9/10/2012 5:14:10 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:18:12 AM") - DateTime.Parse("9/10/2012 5:16:12 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:23:04 AM") - DateTime.Parse("9/10/2012 5:18:43 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:26:05 AM") - DateTime.Parse("9/10/2012 5:25:17 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:29:19 AM") - DateTime.Parse("9/10/2012 5:26:57 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:32:41 AM") - DateTime.Parse("9/10/2012 5:31:41 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:34:08 AM") - DateTime.Parse("9/10/2012 5:33:16 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:49:46 AM") - DateTime.Parse("9/10/2012 5:35:25 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:56:48 AM") - DateTime.Parse("9/10/2012 5:55:35 AM")).TotalMinutes; fM += (DateTime.Parse("9/10/2012 5:59:59 AM") - DateTime.Parse("9/10/2012 5:58:54 AM")).TotalMinutes;
我得到fM = 29.016666666666669。
通过向每个C#语句添加Math.Round(),我得到28.0。 通过添加Math.Floor(),我得到25.0。 通过添加Math.Ceiling我得到33.0。
有人可以解释这种差异吗?
每个的返回值都是衡量不同的东西。
在这里注意DATEDIFF文档是明智的:
返回指定的startdate和enddate之间交叉的指定datepart边界的计数(有符号整数)。
这导致以下2秒间隔:
SELECT datediff(minute, '9/10/2012 5:14:59 AM', '9/10/2012 5:15:01 AM')
返回1因为它跨越了一个分钟边界。 我怀疑你没有考虑到这种行为。
上述就是C#学习教程:带分钟的DATEDIFF不会返回预期值分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949345.html