如何在Sql Server中实现DateDiff?

我在声明中使用以下代码。
datediff(minute, visit.nexttime, visit.endtime)
结果各不相同。 我会告诉你几个结果。 0:24:26 - 25 0:32:14 - 32 0:05:12 - 5 0:06:28 - 7 0:03:52 - 4 0:03:32 - 3 第一轮,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'
    
已邀请:
我实际上并不熟悉SQL Server,但是在这里阅读文档我怀疑我知道你为什么会得到这些结果。 返回值描述如下:   返回的计数(有符号整数)   指定的datepart边界   在指定之间交叉   startdate和enddate。 由于你为
datepart
指定了
minute
,我希望这意味着秒被忽略,它只计算minute4ѭ和
enddate
之间分钟变化的次数。 例如。 如果
startdate
enddate
在同一分钟内相隔50秒,它将返回0。 如果
startdate
enddate
相隔仅5秒,但在不同的分钟内,它将返回1。     
Datediff有点奇怪而且非直观。自从旧的Sybase时代以来,它就是这样运作的。 在你的情况下,datediff(m,x,y)完全忽略秒。 当您尝试计算年龄时,您遇到同样的问题:
select datediff (y, '2010-12-31', '2011-01-01')
并不意味着四舍五入的差异大约是1年,它只是说新的一年发生了。 要获得您想要的结果,您必须在更细粒度的基础上采用差异,就像使用秒数一样。     
请参阅MySql文档。它应该为你澄清这一点。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff     

要回复问题请先登录注册