2012-03-04 4 views

답변

1

면책 조항 :이 작업을 수행 할 수있는 훨씬 더 나은 방법이있을 수 있습니다.

참고 : - 정확한 결과

  • 당신은 내가 DATETIME 합리적으로 (밀리 초 +)를 산출하기 위해 나타나는 DECIMAL(18, 6)에 캐스팅 오전 DATETIME/TIME
  • 에 대해 AVG() 기능을 사용할 수 없습니다.

# 1 - 보통 날짜

SELECT 
    CAST(AVG(CAST(TimeOfInterest AS DECIMAL(18, 6))) AS DATETIME) 

FROM dbo.MyTable; 

는 # 2 - 평균 시간 - 날짜 부분 캐스팅 및

SELECT 
    CAST(AVG(CAST(TimeOfInterest - CAST(TimeOfInterest AS DATE) AS DECIMAL(18, 6))) AS DATETIME) 

FROM dbo.MyTable; 

번째 예 후 평균 제거 날짜를 감산 부분을 ​​DATETIME에서 제거하고 평균 부분을 캐스팅 한 다음 평균 부분을 캐스팅하여 012로 되돌립니다 형식 지정을 위해. 날짜 부분을 제거해야하며 (의미가 없음) 시간 부분은 세트의 평균 시간을 나타내야합니다.

+0

'TimeOfInterest'은'로 datetime' (GRR) 같은 변환을하지 않는, datetime2''유형이었다 . 편집 할 것입니다. –

0
SELECT CAST(AVG(CAST(ReadingDate AS real) - FLOOR(CAST(ReadingDate as real))) AS datetime) 
FROM Rbh 
0

본인은 SQL 표준의 적어도 일부에, 값 표현합니다 (AVG() 함수에 대한 인수가) 날짜 시간 값 또는 문자열 값을 할 수 없습니다 것을 알고있다. 모든 SQL 표준을 읽지는 못했지만 몇 년 동안 그 제한이 완화되면 놀랄 것입니다.

'n'값의 '평균'(또는 산술 평균)이 값을 'n'으로 나눈 값의 합으로 정의되기 때문입니다. '01-Jan-2012 08:00 '+'03-Mar-2012 07:53 '이라는 표현은 의미가 없습니다. 또한 '01-Jan-2012 08:00 '/ 3을 사용합니다.

Microsoft 제품은 날짜 및 시간 데이터 형식의 내부 표현을 노출함으로써 SQL을 사용하여 빠르거나 느슨하게 작업 한 기록을 가지고 있습니다. 데니스 리치 (Dennis Ritchie)는이를 "구현과 관련하여 부당한 불만을 품었다"고 불렀을 것이다.

이전 버전의 Microsoft Access (및 현재 버전에서도 가능)에서는 '01-Jan-2012 '에 '03-Mar-2012'날짜를 곱하여 실제 반환 값을 얻을 수 있습니다 정사각형 단위의 단위.

dbms가 "간격"데이터 형식을 지원하는 경우 평균값을 얻는 것이 쉽고 예상했던대로 수행됩니다. (SQL 서버 간격 데이터 유형을 지원하지 않습니다.) 나는 경우 추가 변환이 필요

create table test (
    n interval hour to minute 
); 

insert into test values 
('1:00'), 
('1:30'), 
('2:00'); 

select avg(n) 
from test; 

avg (interval) 
-- 
01:30:00 
관련 문제