我有两列数据类型时间。我正在使用datediff来查找小时数的差异。 问题是当我尝试找到00:00:00到06:00:00之间的差异时,它返回-18。 我该如何解决? 注意:我需要计算更多的差异所以我不能把它除以-3
my function- (datediff(HOUR, startHour, endHour))*60
提前致谢
答案 0 :(得分: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);
答案 1 :(得分:2)
反转参数:
my function- (datediff(HOUR, endHour, startHour))*60
编辑:
DATEDIFF功能与日期有关,出于某种原因,它认为你减去了6 AM - 午夜(第二天),即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
答案 2 :(得分: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
答案 3 :(得分:0)
我比赛迟到了,但我遇到了类似的问题。
DATEDIFF(HOUR,'23:00:00','06:00:00')
结果:-17
反转两次(如上面的另一个答案所示)并不代表我想要捕捉的时间范围。我不想知道早上6点到晚上11点之间有多少小时。我想要晚上11点到早上6点。
要解决此问题,请将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