2014-12-15 2 views
-1

У меня есть система входа/выхода, которая вычисляет общую работу часов сотрудников. Моя проблема заключается в форматировании даты & разницы во времени за минуты.формат разницы во времени и времени

Пример:

, если пользователь вошел в 8:00 AM и вошедшего из 6:30 PM, итог должен быть 10.50 но мой выход SQL является 10 hrs and 30 mins. Я знаю формулу (она должна быть 30mins/60 = 50), но я не знал, где я должен поместить этот Dividend (/60) в свой SQL-запрос. (see below my SQL Code).

SQL код:

SELECT *,CAST(Datediff(HOUR, 0, logout_time - login_time) + 
     Cast(Datediff(MINUTE, 0, logout_time - login_time) - 
      (Datediff(HOUR, 0, logout_time - login_time) * 60) AS DECIMAL)/100 AS Decimal(18,2)) AS [TotalHrs_Worked] 
FROM table_DTR 
WHERE CONVERT(VARCHAR(10),log_date, 101) BETWEEN '09/01/2014' AND '11/30/2014' 
+1

DATEDIFF (минута, logout_time, login_time)/60 – adrianm

+0

@adrianm: Я также пробовал это. но мне не повезло – Waelhi

+0

'SELECT DATEDIFF (минута, '20141215 08:00:00', '20141215 18:30:00')/60.0' дает мне' 10.50000' – adrianm

ответ

1

Если вы просто взять минут между парой значений даты и времени, и умножить его на 60.0 (с десятичного знака, так что дает результат с десятичным значением), это должен работать без проблем:

Выполнить этот пример:

DECLARE @start DATETIME = '2014-12-15 08:00:00' 
DECLARE @end DATETIME = '2014-12-15 18:30:00' 

SELECT DATEDIFF(minute, @start, @end)/60.0 AS HoursWorked 

Это будет производить:

10.50 

Вам не нужно разбить его на минуты и часы, как в вашем SQL.

+0

спасибо !! .... – Waelhi

Смежные вопросы