-2

我有两列数据类型时间。我正在使用 datediff 来查找小时数的差异。问题是当我试图找出 00:00:00 到 06:00:00 之间的差异时,它返回 -18。我该如何解决?注意:我需要用这个计算更多的差异,所以我不能把它除以 -3

my function- (datediff(HOUR, startHour, endHour))*60

提前致谢

4

4 回答 4

3

你不是在00:00:00比较06:00:00。你有一些日期组件

这以 -18 为例

DECLARE @starthour datetime = '00:00:00';
DECLARE @endhour datetime = '18991231 06:00:00';    
SELECT @starthour, @endhour, DATEDIFF(hour, @starthour, @endhour); 

SET @starthour = '20120507 00:00:00';
SET @endhour = '20120506 06:00:00';
SELECT @starthour, @endhour, DATEDIFF(hour, @starthour, @endhour); 
于 2012-05-07T13:10:48.403 回答
2

反转参数:

my function- (datediff(HOUR, endHour, startHour))*60 

编辑:

DATEDIFF 函数适用于日期,并且由于某种原因,它认为您要减去 6AM - Midnight(第二天),即 18 小时。

以下代码示例在 SQL 2008 中对我来说很好,因此您需要检查您的数据类型以确保您使用的是 TIME 而不是 DATETIME 或 SMALLDATETIME。

declare @t1 time
set @t1 = '00:00:00'
declare @t2 time 
set @t2 = '06:00:00'

select datediff(hour, @t1, @t2)

-- returns 6
于 2012-05-07T12:54:43.560 回答
0

句法:

DATEDIFF (datepart, startdate, enddate )

例子:

SELECT DATEDIFF(hour, '00:00:00', '06:00:00');  

结果:6

SELECT DATEDIFF(hour, '00:00:00', '06:00:00')*60;  

结果:360

参考DATEDIFF (Transact-SQL)

于 2012-05-07T13:07:29.257 回答
0

我玩游戏迟到了,但我遇到了类似的问题。

DATEDIFF(HOUR,'23:00:00','06:00:00')

结果:-17

反转两次(如上面另一个答案所建议的)并不代表我想要捕获的时间范围。我不想知道早上 6 点到晚上 11 点之间有多少小时。我想要晚上 11 点到早上 6 点。

要解决此问题,请将 in 包装DATEDIFF()在一个CASE语句中,并在开始时间大于结束时间时添加 24:

DECLARE @startTime TIME(0) = '23:00:00';
DECLARE @endTime TIME(0) = '06:00:00';
SELECT CASE WHEN @startTime > @endTime THEN 24 + DATEDIFF(HOUR,@startTime,@endTime) ELSE DATEDIFF(HOUR,@startTime,@endTime) END

结果:7

于 2016-05-24T18:04:34.253 回答