上载时间1和2之间的SQL日期差异

时间:2016-11-11 11:36:26

标签: sql datediff difference

我是SQL的新手,想知道你是否可以帮助我创建一个查询,比较天,小时,分钟的时差。

例如,

Start time 1 = 13/01/2016, 16:00
End time 1 = 14/01/2016, 18:00 

所以时差应该是1天2小时吗?

另一个例子。

Start time 2 = 20/10/2016, 12:00
End time 2 = 20/10/2016, 16:00 

所以

time difference is just 2 hours.

我需要此查询的原因是根据任务的开始时间和结束时间之间的时间差创建报告。

2 个答案:

答案 0 :(得分:0)

注意DATEDIFF的问题,忽略了几天等等

DECLARE @Starttime DATETIME = '20160113 16:00';
DECLARE @Endtime   DATETIME ='20160114 15:59';

--calculate difference in seconds then use integer divides and MODULUS to extract days, hours, minutes

;WITH DIFF_SECS AS (SELECT CAST(DATEDIFF(second,@Starttime,@Endtime) AS BIGINT) AS SD)
SELECT SD / (24 * 3600) as NoDays, 
         (SD % (24 * 3600)) / 3600 as NoHours, 
         (SD %  3600)  / 60 AS NoMinutes 
                      FROM DIFF_SECS;

如果您没有使用Microsoft SQL,那么公式可能仍然有用

如果X ='时间之间的差异,以秒为单位'

然后整天= X /(24 * 3600)其中除数是整数除(总是向下舍入)

答案 1 :(得分:0)

在Oracle中我会这样做:

-- this is only to create some data
WITH MyRows AS (
  SELECT to_date('2000/11/30 12:59', 'YYYY/MM/DD HH24:MI') BEGINNING, to_date('2000/11/30 14:01', 'YYYY/MM/DD HH24:MI') ENDING FROM DUAL UNION
  SELECT to_date('2000/12/01 12:59', 'YYYY/MM/DD HH24:MI') , to_date('2000/12/02 00:01', 'YYYY/MM/DD HH24:MI') FROM DUAL UNION
  SELECT to_date('2000/12/30 12:59', 'YYYY/MM/DD HH24:MI') , to_date('2000/12/31 14:01', 'YYYY/MM/DD HH24:MI') FROM DUAL UNION
  SELECT to_date('2000/12/31 12:59', 'YYYY/MM/DD HH24:MI') , to_date('2001/01/01 04:01', 'YYYY/MM/DD HH24:MI') FROM DUAL 
)
-- this is the select
SELECT 
  BEGINNING, 
  ENDING, 
  ENDING-BEGINNING IN_DAYS, 
  (ENDING-BEGINNING)*24 IN_HOURS, 
  (ENDING-BEGINNING)*24*3600 IN_SECONDS, 
  case 
    when (ENDING-BEGINNING)*24*60 >= 3 then round(((ENDING-BEGINNING)*24*60-3)*2)
    else 0
  end Total_cost_in_hamburgers

FROM MyRows
;

时差是几天,如果你想用它计算(f.e.每分钟3分钟后花费2个汉堡包),最好这样计算