3

这是我的代码,结果为 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)
4

5 回答 5

3

DATEDIFF 非常简单,如果您比较分钟,则不会考虑秒数。

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

于 2013-10-15T06:34:24.603 回答
2

9:12 到 9:13 = 1 分钟

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

于 2013-10-15T06:35:04.730 回答
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
于 2013-10-15T06:40:42.083 回答
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
于 2013-10-15T07:58:44.867 回答
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。

于 2013-10-15T09:39:37.160 回答