오버플로 오류가 발생하네요 ㅠ 0 4 686

by 오지현 [SQL Query] [2018.04.02 14:28:53]


지난번 일부 값을 계산못해주는 부분이 발생해서,, 아래와 같이 수정했는데...  오버플로 오류가 발생하네요

WITH t AS
(
SELECT '2000152003' chitemseq, '6.95E+05' chitem1, '8.01E+05' chitem2, '4.82E+05' chitem3
UNION ALL SELECT '2000152003', '6.95E+11' , '8.01E+05' , '4.82E+05' 
)
SELECT chitemseq
     , chitem1, chitem2, chitem3
     , x
     , CASE chitemseq
       WHEN '2000152003' THEN REPLACE(ROUND(x, -5), 'e+0', 'E+')
       --WHEN '2000152003' THEN  CAST(CAST(x / POWER(10, y) AS NUMERIC(3,2))  AS VARCHAR) + 'E+'+CAST(RIGHT('0'+ y, 2) AS VARCHAR)                      
        END z
  FROM (SELECT chitemseq
             , chitem1, chitem2, chitem3
             , ( CAST(chitem1 AS FLOAT)
               + CAST(chitem2 AS FLOAT)
               + CAST(chitem3 AS FLOAT)
               ) / 3 AS x
             , FLOOR(LOG10(
               ( CAST(chitem1 AS FLOAT)
               + CAST(chitem2 AS FLOAT)
               + CAST(chitem3 AS FLOAT)
               ) / 3)) AS y
          FROM t
        ) a
;

REPLACE(ROUND(x, -5), 'e+0', 'E+')

이렇게 표현을 하면,, 값이 700000  이렇게 나와서

그래서  CAST(CAST(x / POWER(10, y) AS NUMERIC(3,2))  AS VARCHAR) + 'E+'+CAST(RIGHT('0'+ y, 2) AS VARCHAR)      

이런 표현식으로 변경했는데 문제는,,

data값중에 10승 이상이 생기면서 오버플로 에러가 밸생하네요..   6.95E+11  이럴경우 POWER부분에서 에러발생하네요..

어떻게 하는게 좋을까요..

 

 

by 마농 [2018.04.02 14:51:44]

1. 지난번 내용을 요약해서 설명해 주세요.
2. 계산 못해주는 부분에 대한 설명도 없네요?
3. 수정 전, 후 쿼리를 비교해 주셔야죠?
4, 원하는 부분에 대한 명확한 설명 부탁드려요.
자기 입장이 아닌 다른 사람의 입장에서 생각해 보고 질문해 주세요.


by 오지현 [2018.04.02 14:59:52]

죄송합니다. 본문 글 수정했습니다.

WHEN '2000152003' THEN REPLACE(ROUND(x, -5), 'e+0', 'E+') 이렇게 해서 나오게되는 오류때문에

WHEN '2000152003' THEN  CAST(CAST(x / POWER(10, y) AS NUMERIC(3,2))  AS VARCHAR) + 'E+'+CAST(RIGHT('0'+ y, 2) AS VARCHAR)   이렇게 바꿨는데 10승 이상에서 오류가 발생하네요 ㅠ


by 마농 [2018.04.02 17:07:51]

 - 변경전 : POWER(10, y)
 - 변경후 : POWER(10., y)


by 오지현 [2018.04.02 17:20:28]

ㅠㅠ 감사합니다. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입