DATEDIFF结果不正确

时间:2013-10-15 06:17:21

标签: sql-server sql-server-2008 tsql

这是我的代码,结果为1,但必须为0,因为持续时间不是一分钟

DECLARE @Start AS DATETIME = '2013-10-08 09:12:59.000'
DECLARE @End AS DATETIME   = '2013-10-08 09:13:09.000'

SELECT DATEDIFF(MI,@Start, @End)

如何解决此问题? 我正在使用SQL Server 2008 R2。

更新

它可以在几秒钟内正常工作.....而不是分钟。

DECLARE @Start AS DATETIME = '2013-10-08 09:12:59.000'
DECLARE @End AS DATETIME   = '2013-10-08 09:13:09.000'

SELECT DATEDIFF(SS,@Start, @End)

5 个答案:

答案 0 :(得分:3)

DATEDIFF非常简单,如果您比较分钟,则不需要花费几秒钟。

更改您的查询以获得以秒为单位的差异并将其除以60,向下舍入。

答案 1 :(得分:2)

9:12到9:13 = 1分钟

如果你想要更好的分辨率,请使用秒数(SS)为你的日期部分然后除以60

答案 2 :(得分:2)

试试这个

DECLARE @Start AS DATETIME = '2013-10-08 09:12:59.000'
DECLARE @End AS DATETIME   = '2013-10-08 09:13:09.000'

SELECT DATEDIFF(SS,@Start, @End)/60

答案 3 :(得分:2)

正如@MartinSmith所提到的,当前的解决方案不是处理毫秒,这是一个更精确的方法

declare @t table(date1 datetime, date2 datetime)
insert @t values('2013-10-08 09:12:00', '2013-10-08 09:13:59')
insert @t values('2013-10-08 09:12:30', '2013-10-08 09:13:29')
insert @t values('2013-10-08 09:12:30:111', '2013-10-08 09:13')
insert @t values('2013-10-08 09:12:30:111', '2013-10-08 09:13')
insert @t values('2013-10-08 09:12:30', '2013-10-08 09:12')

select case when date2 > date1 
        then datediff(minute, 0, date2-date1)
        else -datediff(minute, 0, date1 - date2) 
       end
from @t

答案 4 :(得分:0)

更准确地说,您可以使用:

DECLARE @Start AS DATETIME = '2013-10-08 09:12:59.997'
DECLARE @End AS DATETIME   = '2013-10-08 09:13:59.000'

SELECT DATEDIFF(MS,@Start, @End)/60000.00

但你应该知道,'2013-10-08 09:12:59.001'和'2013-10-08 09:13:59.000'之间的差异在这种情况下也是1.