2012-10-06 11 views
4

마이크로 소프트 SQL 서버 2008R2에 진드기로 채워진 bigint 필드가 있습니다 (단일 진드기는 100 나노초 또는 1 천만 분의 1 초를 나타냄) 밀리 초 단위로 10,000 틱 . 시간 : 분 : 초 : 밀리 초)밀리 초를 일, 시간, 분 및 초로 변환

http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

와 나는 일에 모든 레코드의 합계를 변환해야합니다.

그것은 하나의 레코드를 작동합니다

SELECT CONVERT(TIME, DATEADD(ms, duration/10000, 0)) FROM tblMediaFileProperties WHERE FileId = '6C0A849D-95B4-4755-A923-B9DD8F1AF23E' 

하지만 모든 레코드에 대한 합을 최대 사용하는 경우 :

산술 오버플로 오류 변환 표현 :

SELECT CONVERT(TIME, DATEADD(ms, SUM(duration/10000), 0)) FROM tblMediaFileProperties 

내가이 얻을 데이터 유형 int.

은 내가 ... 오버 플로우가 데이터 유형 시간 함수로 변환에서 오는

도움의 감사, 감사 알아!

답변

4

만 허용하는 DATEADD의 경우 너무 큽니다.
두 부분으로 나누십시오 : 초, 다음 밀리 초.

SELECT CONVERT(TIME, 
      DATEADD(ms, SUM(duration/10000 % 1000), 
      DATEADD(ss, SUM(duration/10000000), 0))) 
FROM tblMediaFileProperties 

그리고 총 지속 시간이 1 일을 넘으면 이것을 사용하여 일과 시간 : 분 : 초 : ms를 따로 얻을 수 있습니다. 실제로 결과를 텍스트 형식으로 원한다면 캐스트와 문자열 concat의 문제입니다.

declare @duration bigint 
set @duration = 1230000000 
SELECT @duration/10000/1000/60/60/24 DAYS, 
     CONVERT(TIME, 
      DATEADD(ms, SUM(@duration/10000 % 1000), 
      DATEADD(ss, SUM(@duration/10000000), 0))) HR_MIN_SEC 
+0

+1 이제 귀하의 답변에 기본 문제가 포함되어 있다고 생각합니다. – Steve

관련 문제