database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39728 게시물 읽기
No. 39728
오라클 시간계산차이 계산시 에러
작성자
마루아라(maruara)
작성일
2012-11-05 12:56ⓒ
2012-11-05 13:04ⓜ
조회수
8,250

 

오라클 버전 : 10g 10.2.0.3.0 - 64bit

오라클에서 시간 합계를 구하는데 ORA-01830: date format picture ends before converting entire input string 이런 에러가 나옵니다.

근데 문제는 에러가 대부분 안나는데 시간 차가 1시간 나는 건수가 2건일 경우에만 에러가 발생합니다. 다른 케이스는 아직 발견을 못했습니다.

 

아래 테스트 쿼리를 실행하면 에러가 발생합니다.

똑같은 쿼리를 union all로 하나 더 붙이거나 하나를 없애거나 시간차를 1시간이 아닌 다른 시간차로 변경할 경우에는 에러가 발생하지 않네요..

AAA 컬럼과 BBB 컬럼이 똑같다고 생각되는데 AAA는 되는데 BBB는 되지 않네요.

이유를 아시는 분 답변 부탁드립니다.

추가로 아래 방법 말고 시간차이 합계를 내서 00일 00시 00분 이렇게 표시하는 방법이 있을까요?

 

WITH TB AS (
SELECT MOD(TO_DATE('201211051100', 'YYYYMMDDHH24MI') - TO_DATE('201211051000', 'YYYYMMDDHH24MI'), 1) TIM FROM DUAL
UNION ALL
SELECT MOD(TO_DATE('201211051100', 'YYYYMMDDHH24MI') - TO_DATE('201211051000', 'YYYYMMDDHH24MI'), 1) TIM FROM DUAL
)
SELECT TIM
        , TO_CHAR(TO_DATE(7200, 'SSSSS'), 'HH24:MI') AAA
        , TO_CHAR(TO_DATE(SUM(TIM) OVER() * 86400, 'SSSSS'), 'HH24:MI') BBB
  FROM TB

 

 

이 글에 대한 댓글이 총 4건 있습니다.

시간차를 초로 환산할 때
(종료시간 - 시작시간)*24*60*60 하게 되는데.
이때 나온 초가 정수이어야 'SSSSS'포멧에 맞게 됩니다.
그러나 이 값이 항상 정수가 나오지는 않습니다.
따라서 ROUND 로 보정해 주시면 됩니다.
ROUND((종료시간 - 시작시간)*24*60*60)


SUM() OVER() 분석함수를 사용하셨는데...
분석함수를 사용할 필요가 있는지 의문이네요.
그냥 SUM() 집계함수만 사용하시면 될 듯 하네요.

마농(manon94)님이 2012-11-05 13:10에 작성한 댓글입니다.

마농님 감사합니다. ROUND로 하니 잘 되네요.

SUM() OVER() 는 제가 쿼리를 테스트로 만들다 보니깐 원래 쿼리 있는대로 쓴건데요

쿼리에는 GROUP BY가 있어서요 그냥 SUM하고 SUM OVER 2개 모두 필요해서요 ^^;

마루아라(maruara)님이 2012-11-05 13:50에 작성한 댓글입니다.

WITH TBL AS (
SELECT  '201211051000' STM , '201211051100' ETM FROM DUAL UNION ALL
SELECT  '201211051100' STM , '201211051110' ETM FROM DUAL UNION ALL
SELECT  '201211051200' STM , '201211061420' ETM FROM DUAL
)
SELECT  CHA_1
       ,SUBSTR(CHA_1, 9,2) || '일 ' ||
        SUBSTR(CHA_1,12,2) || '시 ' ||
        SUBSTR(CHA_1,15,2) || '분' CHA_1C
       ,CHA_2
       ,SUBSTR(CHA_2, 8,3) || '일 ' ||
        SUBSTR(CHA_2,12,2) || '시 ' ||
        SUBSTR(CHA_2,15,2) || '분' CHA_2C

  FROM (
    SELECT  NUMTODSINTERVAL(SUM(
            TO_DATE(ETM,'YYYYMMDDHH24MI') - TO_DATE(STM,'YYYYMMDDHH24MI'))
                ,'DAY') CHA_1
           ,NUMTODSINTERVAL(SUM(
            TO_DATE(ETM,'YYYYMMDDHH24MI') - TO_DATE(STM,'YYYYMMDDHH24MI')) + 0.00000000001
                ,'DAY') CHA_2
      FROM  TBL
    )

 

+000000001 03:29:59.999999999 01일 03시 29분 +000000001 03:30:00.000000863 001일 03시 30분

손님이 2012-11-07 17:59에 작성한 댓글입니다.
이 댓글은 2012-11-07 18:13에 마지막으로 수정되었습니다. Edit

손님분(?) 이런 방법도 있었군요. 감사합니다.
오늘 또 하나 배우고 가네요 ^^

마루아라(maruara)님이 2012-11-08 15:36에 작성한 댓글입니다.
이 댓글은 2012-11-08 15:46에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
39731오라클 컬럼값에 * 로 표시 되는 데이터들이 보여요
유니맥스
2012-11-07
4868
39730아우터 조인으로 해결이 안되는거 같아요 ;; [1]
초보자
2012-11-06
5094
39729오라클에 파일로 데이터 입력 [1]
리스토리
2012-11-06
4902
39728오라클 시간계산차이 계산시 에러 [4]
마루아라
2012-11-05
8250
39727[급]오라클8.0.5 DB job 생성 오류문의드려요
유석종
2012-11-03
4881
39726오라클 8i에서 시간 계산 도와주세요..
이재훈
2012-11-02
4949
39725도와주세요 ㅠㅠ [3]
최종욱
2012-11-02
5562
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다