문자열 계산식으로 계산하기 0 2 6,207

by poodle [PL/SQL] 정규식 형변환 [2017.10.25 17:36:06]


안녕하세요~

현재 테이블에 등록된 컬럼의 문자열의 수식으로 계산된 금액을 만들고 싶습니다.

txt컬럼 문자열로 등록이 되어 있는데 %,숫자,점, 사칙연산, 괄호 숫자 계산에 필요한 항목을 제외한 내역을 제거합니다.

현재 이부분까지는 해결이 되었는데요

불필요한 내역이 제거된 문자열로 계산을 해야 하는데요

to_number와 같은 함수가 먹히지 않아서요

txt내역으로 amt의 금액일 생성 할 수 있을까요?

with t as
(
  select '1,027,274,000원*84%*20일*1/12*1/30*0.55' as txt , 26367000 as amt from dual
  union all
  select '9,758원*150%*4명*12월*30시간',    21078000 from dual
  union all
  select '10,000,000원',     10000000 from dual
  union all
  select '100*10mm',     1000 from dual
)
select txt, amt,REGEXP_REPLACE( replace( replace(txt,',',''),'%','*0.01'),'[^0-9()., ^\*/+-]','') 
from t;
 

txt amt 불필요내역제거컬럼
1,027,274,000원*84%*20일*1/12*1/30*0.55 26367000 1027274000*84*0.01*20*1/12*1/30*0.55
9,758원*150%*4명*12월*30시간 21078000 9758*150*0.01*4*12*30
10,000,000원 10000000 10000000
100*10mm 1000 100*10
by jkson [2017.10.25 17:47:27]

dbms_xmlgen.getxmltype 사용하세요~


by poodle [2017.10.25 17:53:54]

네 감사합니다.

덕분에 해결 했어요!!


with t as
(

  select '1,027,274,000원*84%*20일*1/12*1/30*0.55' as txt , 26367000 as amt from dual
  union all
  select '9,758원*150%*4명*12월*30시간',    21078000 from dual
  union all
  select '10,000,000원',     10000000 from dual
  union all
  select '100*10mm',     1000 from dual
)
select  to_number(   DBMS_XMLGEN.GETXMLTYPE('select '||REGEXP_REPLACE( replace( replace(txt,',',''),'%','*0.01'),'[^0-9()., ^\*/+-]','') ||' from dual').EXTRACT('//text()') ) val, txt, amt
from t;

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