숫자를 거듭제곱 으로 표현하는건 ... 0 4 551

by 오지현 [2018.01.09 17:00:52]


 

power 함수를 통해서 POWER(10,2)  이럴경우 10의 2승으로 계산해서 100 으로 나오는건 아는데...

100을 10의2승으로 표현하려면 이건 어떻게 해야할까요?

 

분석 DATA관련 DATA를 입력받아서 결과치를 판명해줘야하는데

10의7승에서 10의9승 사이의 값 3개를 받아서 평균치를 넣어주고, 그 평균치를 가지고 이 범위를 벗어나면 FALSE 라고 찍어줘야하는데

이걸 어떻게 해야할까요?  ㅠㅠ

엑셀에서는 이렇게 표현하더라구요

측정결과 합/부
1 2 3 Avg.
5E+07 1E+07 4E+07 3.3E+07 PASSED

도저히 모르겠네요

 

by 마농 [2018.01.09 17:40:57]

엑셀 지수 표현식 그대로 사용 가능합니다.
단, 출력을 지수 표현식처럼 하고 싶으면 to_char 로 바꿔 주셔야 합니다.

WITH t AS
(
SELECT 5E+07 v1
     , 1E+07 v2
     , 4E+07 v3
  FROM dual
)
SELECT REPLACE(TO_CHAR(v1, 'fm0.9EEEE'), '.E', 'E') v1
     , REPLACE(TO_CHAR(v2, 'fm0.9EEEE'), '.E', 'E') v2
     , REPLACE(TO_CHAR(v3, 'fm0.9EEEE'), '.E', 'E') v3
     , REPLACE(TO_CHAR((v1 + v2 + v3) / 3, 'fm0.9EEEE'), '.E', 'E') v_avg
     , CASE WHEN (v1 + v2 + v3) / 3 BETWEEN 1E7 AND 1E9 THEN 'PASSED' ELSE 'FALSE' END passed
  FROM t
;

 


by 오지현 [2018.01.09 22:00:13]

혹시,, sql로도 표현해주실수 있을까요?? 둘다 써야할거 같아서요..  정말 감사합니다.

sql은 CAST나 CONVERT 로 변환해서 하면 될거 같은데 뒤에 fm0.9EEEE 이부분을 잘모르겠어요 ㅠ


by 마농 [2018.01.10 10:28:39]
-- MSSQL --
WITH t AS
(
SELECT 5E+07 v1
     , 1E+07 v2
     , 4E+07 v3
)
SELECT REPLACE(CAST(CAST(v1 AS FLOAT) AS VARCHAR), 'e+0', 'E+') v1
     , REPLACE(CAST(CAST(v2 AS FLOAT) AS VARCHAR), 'e+0', 'E+') v2
     , REPLACE(CAST(CAST(v3 AS FLOAT) AS VARCHAR), 'e+0', 'E+') v3
     , REPLACE(CAST(CAST( ROUND( (v1 + v2 + v3) / 3
                        , FLOOR(LOG10((v1 + v2 + v3) / 3)) * -1 + 1
                        ) AS FLOAT) AS VARCHAR), 'e+0', 'E+') v_avg
     , CASE WHEN (v1 + v2 + v3) / 3 BETWEEN 1E7 AND 1E9 THEN 'PASSED' ELSE 'FALSE' END passed
  FROM t
;

 


by 오지현 [2018.03.08 14:02:07]

WITH t AS
(
SELECT '2000152001' chitemseq, '326' chitem1, '284' chitem2, '203' chitem3
UNION ALL SELECT '2000152002',       '40',       '70',       '20'
UNION ALL SELECT '2000152003', '5.39E+07', '1.85E+08', '1.17E+08'
UNION ALL SELECT '2000152003', '4.00E+05', '8.01E+05', '4.82E+05'
UNION ALL SELECT '2000152003', '6.95E+05', '8.01E+05', '4.82E+05'
)
SELECT chitemseq
     , chitem1, chitem2, chitem3
     , x
     , CASE chitemseq
       WHEN '2000152001' THEN CAST(CAST(x AS NUMERIC(12, 1)) AS VARCHAR)
       WHEN '2000152002' THEN CAST(CAST(x AS NUMERIC(12, 0)) AS VARCHAR)
       WHEN '2000152003' THEN REPLACE(ROUND(x, -5), 'e+0', 'E+')
        END z
  FROM (SELECT chitemseq
             , chitem1, chitem2, chitem3
             , ( CAST(chitem1 AS FLOAT)
               + CAST(chitem2 AS FLOAT)
               + CAST(chitem3 AS FLOAT)
               ) / 3 AS x
          FROM t
        ) a
;

 

이렇게 하니,, 일부값들이 그냥

600000, 700000 이렇게 값이 나옵니다. ㅠㅠ 이런경우는 어떻게 해야할까요?

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