2017-09-08 2 views
0

현재 날짜 사이의 시간 차이를 찾고 시간 (00:00)으로 출력하는 중입니다. 그러나 나는이 계산을 합하여 char/varchar로 변환 할 수 없다는 것을 의미합니다.날짜/시간 필드를 사용하여 SQL의 날짜 차이를 char/varchar로 변환하지 않고 계산하십시오.

아래 예제 데이터를 어떻게 표시하고 싶습니다. 시간에 대한

EMPLOYEE_ID Start    End     Duration 
1   05/06/2015 08:30 05/06/2015 12:12 03:42 
1   05/06/2015 13:18 05/06/2015 17:00 03:42 
1   06/06/2015 08:30 06/06/2015 12:12 03:42 
1   06/06/2015 13:18 06/06/2015 17:00 03:42 

현재 코드는 : 그것은 VARCHAR이고 나는 두 개의 기간을 합계에 가고 싶지만

CONVERT(varchar(5),DATEADD(minute,DATEDIFF(minute,Start, End),0), 114) as Duration 

물론,이 코드는 내가 그것을 원하지 방법. 나는 주변을 둘러 보았지만 이것이 어떻게 이루어질지를 보여주는 어떤 것도 발견 할 수 없다.

select datediff(minute, start, end) as duration_min 
. . . 

이 작업을 훨씬 쉽게 :

답변

2

분의 지속 시간을 계산합니다. 그런 다음 분을 합칩니다.

나는 이것을 이렇게 남겨 둘 것을 권한다. 그러나 HH : MM 형식으로 원한다면 수동으로 원하는 형식의 문자열로 변환하십시오.

time 데이터 형식을 사용하지 마십시오. 24 시간으로 제한됩니다.

1

SQL Server doesn't currently supoort the ANSI SQL INTERVAL data type 그래서 집계를 지원하기 위해 할 수있는 최선의 방법은 일관된 측정 단위 (여기서 사용한 분)와 같은 기간을 계산 한 다음 집계 결과를 사용하여 고정 된 datetime 값의 간격을 계산하는 것입니다. 아래 예제에서는 결과를 문자열로 변환하기 위해 FORMAT 함수를 사용하지만 표시 목적으로 T-SQL이 아닌 표현 계층에서 형식을 지정하는 것이 좋습니다.

CREATE TABLE dbo.EmployTimeRecord (
     EMPLOYEE_ID int NOT NULL 
    , StartTime smalldatetime NOT NULL 
    , EndTime smalldatetime NOT NULL 
    , DurationMinutes AS DATEDIFF(minute, StartTime, EndTime) 
    ); 

INSERT INTO dbo.EmployTimeRecord(EMPLOYEE_ID, StartTime, EndTime) 
    VALUES 
     (1, '2015-05-06T08:30:00', '2015-05-06T12:12:00') 
    , (1, '2015-05-06T13:18:00', '2015-05-06T17:00:00') 
    , (1, '2015-05-06T08:30:00', '2015-05-06T12:12:00') 
    , (1, '2015-05-06T13:18:00', '2015-05-06T17:00:00'); 


SELECT 
     EMPLOYEE_ID 
    , FORMAT(DATEADD(minute, SUM(DurationMinutes), ''), 'HH:mm') AS Duration 
FROM dbo.EmployTimeRecord 
GROUP BY EMPLOYEE_ID; 
관련 문제