我有两列数据类型时间。我正在使用 datediff 来查找小时数的差异。问题是当我试图找出 00:00:00 到 06:00:00 之间的差异时,它返回 -18。我该如何解决?注意:我需要用这个计算更多的差异,所以我不能把它除以 -3
my function- (datediff(HOUR, startHour, endHour))*60
提前致谢
我有两列数据类型时间。我正在使用 datediff 来查找小时数的差异。问题是当我试图找出 00:00:00 到 06:00:00 之间的差异时,它返回 -18。我该如何解决?注意:我需要用这个计算更多的差异,所以我不能把它除以 -3
my function- (datediff(HOUR, startHour, endHour))*60
提前致谢
你不是在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);
反转参数:
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
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(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