我在语句中使用了以下代码。
datediff(minute, visit.nexttime, visit.endtime)结果各不相同。
我会给你们看几个结果。
第一个,24圈到25圈,而只有26秒。
第二,32仍然是第二个是14。
第三,5仍然是5,很公平。
第四轮,6圈到7圈,只有28秒。
第五圈,3圈,4圈,52秒。
最后一个,3仍然是3,即使有32秒。
为什么会这样呢?
我使用下面的代码获取我的第一列。
CONVERT(varchar(6), datediff(second, visit.nexttime, visit.endtime)/3600)
+ ':' +
RIGHT('0' + CONVERT(varchar(2), (datediff(second, visit.nexttime, visit.endtime) % 3600) / 60), 2)
+ ':' +
RIGHT('0' + CONVERT(varchar(2), datediff(second, visit.nexttime, visit.endtime) % 60), 2)
as 'Transaction Time'发布于 2010-12-17 07:30:01
我实际上并不熟悉Server,但是阅读这里文档时,我怀疑我知道为什么您会得到这些结果。
返回值描述如下:
返回在指定的开始日期和结束日期之间交叉的指定日期部分边界的计数(有符号整数)。
因为您为minute指定了datepart,所以我认为这意味着秒被忽略,它只计算startdate和enddate之间每分钟变化的次数。
例如:
如果startdate和enddate在同一分钟内相隔50秒,它将返回0。
如果startdate和enddate相距仅5秒,但在不同的分钟内,它将返回1。
发布于 2010-12-17 07:25:59
Datediff有点奇怪,而且很不直观。从以前的Sybase时代起就这样运作了。
在您的例子中,datediff(m,x,y)完全忽略了秒。
当您试图计算年龄时,您也遇到了同样的问题:
select datediff (y, '2010-12-31', '2011-01-01')这并不意味着四舍五入的差额大约是一年,它只说明了一个新年的到来。
为了得到你想要的结果,你必须在一个更细粒度的基础上取这个差,就像你用秒做的那样。
发布于 2010-12-17 05:56:41
请参阅MySql文档。它应该为你澄清这一点。
达迪夫
https://stackoverflow.com/questions/4468083
复制相似问题