2015-08-03 2 views
1

Мои данные выглядит следующим образом:DATEDIFF между часами

Col1  Col2  output 
09:35 16:00 6,25 <-- need help with this 

Я хотел бы иметь результата показывают H,m (часы, minuts)

Datediff(Hours,Col1,Col2) 

дать мне 7.

Я не Не пытайтесь использовать какие-либо параметры, если это возможно, используйте только некоторые простые функции.

+0

Почему вы хотите получить такой формат? Не будет ли формат времени намного лучше? Вы пытаетесь вычесть время из времени, чтобы получить новое время, а затем манипулировать форматом, а не сохранять формат времени. –

ответ

2

Я думаю, что я бы просто сделать это в явном виде, взяв разницу в минутах и ​​делать числовые расчеты:

select (cast(datediff(minute, col1, col2)/60 as varchar(255)) + ',' + 
     right('00' + cast(datediff(minute, col1, col2) % 60 as varchar(255)), 2) 
     ) 
0

Вы можете попробовать один из следующих решений:

-- Solution 1: Mathematical correct time 
CREATE TABLE #time(col1 time, col2 time) 

INSERT INTO #time(col1, col2) 
VALUES(N'09:35',N'16:00'),(N'8:10',N'22:44') 

SELECT col1, col2, CONVERT(decimal(10,2),DATEDIFF(MINUTE,Col1,Col2))/60 as [output] 
FROM #time 

DROP TABLE #time 
GO 

-- Solution 2: Your expected value 
CREATE TABLE #time(col1 time, col2 time) 

INSERT INTO #time(col1, col2) 
VALUES(N'09:35',N'16:00'),(N'8:10',N'22:44') 

SELECT DATEDIFF(MINUTE,Col1,Col2)/60 as [hours], DATEDIFF(MINUTE,Col1,Col2)%60 as [minutes], 
    -- Contated values: 
    DATEDIFF(MINUTE,Col1,Col2)/60 + (CONVERT(decimal(10,2),DATEDIFF(MINUTE,Col1,Col2)%60))/100 as [output] 
FROM #time 

DROP TABLE #time 

Выход Solution 1:

col1    col2    output 
---------------- ---------------- --------------------------------------- 
09:35:00.0000000 16:00:00.0000000 6.416666 
08:10:00.0000000 22:44:00.0000000 14.566666 

Выход Solution 2:

hours  minutes  output 
----------- ----------- --------------------------------------- 
6   25   6.250000 
14   34   14.340000 

Вы можете по-прежнему круглые/преобразования значения чтобы соответствовать вашему 2-значному шаблону - при необходимости.

3

насчет получения даты диф в течение нескольких минут и преобразование результата в строку, которую вы хотите:

SELECT CONCAT(DATEDIFF(MINUTE, '09:35', '16:00')/60, ':', DATEDIFF(MINUTE, '09:35', '16:00') % 60); 
0

Обратите внимание, что если второе время col1 больше, чем время col2, вы получите напуганный результат.

Просто кастинг оба раза в DateTime, вы можете вычесть их:

SELECT 
    cast(cast('16:00' as datetime) - cast('09:35' as datetime) as time(0)) 

Результат:

06:25:00 

В случае, если для Вас подобный формат (я предпочел бы формат времени):

SELECT 
    stuff(left(cast(cast('16:00' as datetime) 
    - cast('09:35' as datetime) as time(0)), 5), 3,1,',') 

Результат:

06,25