오라클 숫자자르기 질문드립니다! 0 8 788

by 마이닝 [Oracle 기초] [2017.09.01 10:59:13]



SELECT
ROUND(NVL(SUM(take_prc) over(PARTITION BY code),0),-8) AS ARP
FROM TEST

위와같은 SELECT 형식으로 ARP가 1242500000000 이런식으로나옵니다

그런데 저는 8자리에서 반올림하고 나머지뒤에 0은 안보이게하고싶습니다 12425 만나오면되는데.. 문제는 앞자리수가 게속바뀌는구조라

substring으로 자르기가 힘들더라구요..

현제 데이터는 아래와같은데 -> 처럼 할려면 어떻게해야할까요.

고수님들의 조언부탁드리겠습니다

190900000000      -> 1909
1242500000000    -> 12425
2032600000000    -> 20326
1303400000000    -> 13034
35200000000       ->352

by 우리집아찌 [2017.09.01 11:11:41]
WITH T AS (
SELECT 190900000000 AS ARP FROM DUAL UNION ALL  --    -> 1909
SELECT 1242500000000  FROM DUAL UNION ALL  --     -> 12425
SELECT 2032600000000  FROM DUAL UNION ALL  --    -> 203260
SELECT 1303400000000  FROM DUAL UNION ALL  --     -> 13034
SELECT 35200000000    FROM DUAL --     ->352
)

SELECT ARP
     , REPLACE ( TO_CHAR(ARP) , '00000000' , '' )  AS VAL1 
     , REGEXP_REPLACE( TO_CHAR(ARP) , '[0]{8}$' , '' ) AS VAL2
  FROM T 

 


by 마이닝 [2017.09.01 11:14:53]

와... 아찌님 감사합니다. 아까부터 한참 고민했는데..  REGEXP_REPLACE는 처음보는 함수네요. 검색해서 어떤식으로 되는지 알아봐야겠어요 ㅎㅎ 도움받아갑니다 감사합니다.!


by 우리집아찌 [2017.09.01 11:12:49]

2032600000000    -> 203260   이거 맞나요?


by 마이닝 [2017.09.01 11:15:33]

그부분은 제가 오타쓴거같아요 20326만 나오면되는게 맞습니다. 감사합니다


by 필상 [2017.09.01 11:18:40]

select round(1242500000000 / 100000000, 0) from dual;


by 마이닝 [2017.09.01 11:21:26]

어아... 그냥 나누는방법도있었군요. 왜생각을 못했지.. 감사합니다!


by h2wshot [2017.09.01 13:17:40]

SELECT ARP
     , LTRIM ( TO_CHAR(ARP) , '0')  AS VAL1 
  FROM T 


by 마농 [2017.09.01 13:44:04]

글쎄요?
필상님이 계산하신 방법이 맞다면?
다른 분들이 제시한 regexp_replace 나 trim 을 이용한 방법은 틀린 방법입니다.
마지막 0 의 자리수가 8자리가 아닌 경우 틀린 결과를 내게 됩니다.(7자리나 9자리 등)

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