2013-05-11 1 views
4

십진수 (18,0)에서시, 분 및 초까지 초 단위로 측정 기간을 전송해야합니다.테라 다라 : 초당 시간, 분 및 초 주조

e.g.: 
8192 Seconds => 2:16:32 (Hours:Minutes:Seconds) 

내가 발견 한 초이 같은 리터럴 문자열이 있다면 나는이 작업을 수행 할 수 있습니다 (here) :

SELECT CAST(INTERVAL '8192' SECOND AS INTERVAL HOUR TO SECOND) 

을하지만하려고하면

SELECT Event_Id 
    , CAST(INTERVAL Duration SECOND AS INTERVAL HOUR TO SECOND) 
    FROM EVENT_TABLE 
WHERE <some conditions> 

EVENT_TABLE 테이블에서 Event_Id 및 Duration이 모두 10 진수 (18,0)로 선언됩니다.

테라 데이타는 불평 :

[오류 3707가] 구문 오류가의 '간격'키워드와 정수 사이의 리터럴 문자열이나 유니 코드 문자와 같은 예상 뭔가 8

이란 무엇입니까 올바른 구문 또는 접근법을 사용 하시겠습니까?


해결책 : BellevueBob의 게시물에 기반이

SELECT Event_Id 
    , CAST(
      Duration SECOND * INTERVAL '0000:01' MINUTE TO SECOND /* 1 */ 
      AS INTERVAL HOUR TO SECOND        /* 2 */ 
      ) 
    FROM EVENT_TABLE 
WHERE <some conditions> 

설명 :

  1. 곱하기 일초 길이의 간격으로 초 단위로 알려진 기간
  2. 변환 결과적으로 초의 인터벌이 시간, 분 및 초의 terval.
  3. 찾은 동일한 솔루션에서
+0

에 대한 어떤 '선택 INTERVAL'8192 ''초 (즉, ANSI SQL 것) –

+0

@a_horse_with_no_name : ANSI,하지만 수행 할 수 리터럴 문자열 '8192'대신 열 참조를 사용합니까? (그 질문을 __was__ ...) – lexu

+0

무엇에 대해 :'선택 duration_col_in_seconds * foo에서 1 초' –

답변

3

,이 시도 :

select CAST(duration * INTERVAL '0000:01' MINUTE TO SECOND 
      AS INTERVAL HOUR TO SECOND) 
from (
    select cast(8192 as decimal(18,0)) as duration 
    ) x 
+0

감사합니다 ... 제 설명이 정확한지 내 원래의 질문에 내 리뷰를 검토하십시오. – lexu

관련 문제